Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2010, 17:30   #1
garyanikin
Дизайнер, Кодер.
Пользователь
 
Аватар для garyanikin
 
Регистрация: 31.12.2009
Сообщений: 45
По умолчанию Отправить нажатия клавиш в чужое приложение.

Здравствуйте.
Собственно сабж...
Очень много гуглил, толкового ничего не нашёл.

Программа должна нажимать энтер(активируется строка куда писать),
потом жать ctrl+V или по другому вставлять текст и потом опять энтер.

Вот что я пока что набросал, но меня это не устраивает(т.к. он просто по очереди жмёт на кнопки текста)
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
Handle:THandle;
i : integer;
begin
i := 0;
while
i<StrToInt(Edit1.Text)
do
begin
Handle:=FindWindow(nil, 'R2');
SendMessage(Handle, WM_KEYDOWN, VK_RETURN, 0);
SendMessage(Handle, WM_KEYUP, VK_RETURN, 0);
sleep(100);
PostMessage(Handle, WM_KEYUP, ord('R'), 0);
sleep(100);
PostMessage(Handle, WM_KEYUP, ord('E'), 0);
sleep(100);
PostMessage(Handle, WM_KEYUP, ord('G'), 0);
sleep(100);
PostMessage(Handle, WM_KEYUP, ord('K'), 0);
sleep(100);
PostMessage(Handle, WM_KEYUP, ord(190), 0);
sleep(100);
PostMessage(Handle, WM_KEYUP, VK_SPACE, 0);
sleep(100);
PostMessage(Handle, WM_KEYUP, ord('Y'), 0);
sleep(100);
PostMessage(Handle, WM_KEYUP, ord('E'), 0);
sleep(100);
PostMessage(Handle, WM_KEYUP, ord(188), 0);
sleep(100);
PostMessage(Handle, WM_KEYUP, ord('J'), 0);
sleep(100);
PostMessage(Handle, WM_KEYUP, ord('N'), 0);
sleep(100);
PostMessage(Handle, WM_KEYUP, ord('J'), 0);
sleep(100);
PostMessage(Handle, WM_KEYUP, ord('X'), 0);
sleep(100);
PostMessage(Handle, WM_KEYUP, ord('B'), 0);
sleep(100);
PostMessage(Handle, WM_KEYUP, VK_SPACE, 0);
sleep(100);
PostMessage(Handle, WM_KEYUP, ord('3'), 0);
sleep(100);
PostMessage(Handle, WM_KEYUP, ord('1'), 0);
sleep(100);
PostMessage(Handle, WM_KEYUP, ord('R'), 0);
sleep(100);
SendMessage(Handle, WM_KEYDOWN, VK_RETURN, 0);
SendMessage(Handle, WM_KEYUP, VK_RETURN, 0);
sleep(10000);
i:=i+1;
end;
end;
Помогите кто сможет, заранее спасибо!
garyanikin вне форума Ответить с цитированием
Старый 20.03.2010, 18:16   #2
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Смотри в сторону
WM_KEYDOWN
WM_CUT
WM_COPY
WM_PASTE
psycho-coder вне форума Ответить с цитированием
Старый 20.03.2010, 19:04   #3
garyanikin
Дизайнер, Кодер.
Пользователь
 
Аватар для garyanikin
 
Регистрация: 31.12.2009
Сообщений: 45
По умолчанию

Начал копать в сторону WM_PASTE
И наткнулся на проблему с использованием WinSight'a, как отловить определенное поле edit?? подскажите плиз или ссылку на мануал киньте.
garyanikin вне форума Ответить с цитированием
Старый 20.03.2010, 19:17   #4
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Ну хотя бы по содержимому
psycho-coder вне форума Ответить с цитированием
Старый 20.03.2010, 22:39   #5
garyanikin
Дизайнер, Кодер.
Пользователь
 
Аватар для garyanikin
 
Регистрация: 31.12.2009
Сообщений: 45
По умолчанию

Цитата:
Сообщение от psycho-coder Посмотреть сообщение
Ну хотя бы по содержимому
Мм... не понял..
garyanikin вне форума Ответить с цитированием
Старый 21.03.2010, 16:05   #6
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Edit - это класс зарегистрированный в винде. Это тоже окно но с другими свойствами и если в Edit есть текст то с помощью функции GetWindowText и GetWindowTextLength (кажется так) можно получить текст из Edit.
WinSight видит содержимое этого окна
Изображения
Тип файла: jpg mpo.jpg (43.0 Кб, 151 просмотров)
psycho-coder вне форума Ответить с цитированием
Старый 23.03.2010, 21:59   #7
garyanikin
Дизайнер, Кодер.
Пользователь
 
Аватар для garyanikin
 
Регистрация: 31.12.2009
Сообщений: 45
По умолчанию

Так теперь проблема в другом....

Пытаюсь отправить клавишу F2, ну это типо гарячая клавиша в том приложении, но ноль реакции! Делаю так:
Код:
SendMessage(Handle, WM_KEYDOWN, VK_F2, 0);
SendMessage(Handle, WM_KEYUP, VK_F2, 0);
garyanikin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставка текста в чужое приложение MyasNick Win Api 19 08.04.2012 10:46
Закрыть чужое приложение Михаил Юрьевич Общие вопросы Delphi 3 28.03.2009 21:26
Вставка из буфера в чужое приложение Denager Общие вопросы Delphi 2 20.09.2008 13:24
чужое приложение Electrod Win Api 12 27.01.2008 17:04
Как активировать чужое приложение Hintman Win Api 3 30.04.2007 16:24