![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравствуйте, суть задачи такова. Есть некоторое приложение, запущенное на компьютере. В окне у этого приложения есть какие-то кнопки. Возможно ли написать такую программу, которая организовывала бы нажатие на кнопку в этом стороннем приложении.
P.S. Литературу, посвященную работе с посторонними окнами читал, но то, что нужно не нашел. |
#2
|
|||
|
|||
![]() Win32 API вам в руки.
Допустим, есть на чужом окне кнопка, подписанная как 'btn'. Вашему приложению необходимо найти дескриптор чужого окна (handle) и затем — дескриптор кнопки 'btn', которая тоже является (дочерним) окном по сути. Поиск окна по заголовку можно осуществлять с помощью функций FindWindow и FindWindowEx. Вот, например, такой код позволит вам нажать кнопку 'btn', расположенную в чужом окне с заголовком, скажем, 'other form'. Код:
procedure TForm1.Button1Click(Sender: TObject); var OtherWnd: HWND; BtnWnd: HWND; begin OtherWnd := FindWindow(nil, PChar('other form')); BtnWnd := FindWindowEx(OtherWnd, 0, nil, PChar('btn')); SendMessage(BtnWnd, BM_CLICK, 0, 0); end; |
#3
|
||||
|
||||
![]() Можно. Только нужно знать абсолютные координаты кнопки.
Вот код: Код:
procedure mouseclick(pt: tpoint; backcursor: boolean = true); // Переводим экранные координаты к принятым в mouse_event function screentoabsolute(const pt: tpoint): tpoint; begin result.x := round(pt.x * 65535 / screen.width); result.y := round(pt.y * 65535 / screen.height); end; var oldpt: tpoint; begin if backcursor then oldpt := screentoabsolute(mouse.cursorpos); pt := screentoabsolute(pt); {Переместим курсор мыши} mouse_event(mouseeventf_absolute or mouseeventf_move, pt.x, pt.y, 0, 0); {Нажамаем левую кнопку мыши} mouse_event(mouseeventf_absolute or mouseeventf_leftdown, pt.x, pt.y, 0, 0); {Отпускаем левую кнопки мыши} mouse_event(mouseeventf_absolute or mouseeventf_leftup, pt.x, pt.y, 0, 0); if backcursor then {Перемещаем кнопку мыши обратно} mouse_event(mouseeventf_absolute or mouseeventf_move, oldpt.x, oldpt.y, 0, 0); end; Хорошо написанная программа не требует документации ICQ 9-184-668. |
#4
|
|||
|
|||
![]() Спасибо за советы, буду пробовать.
|