![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как имитировать нажатие мышки в чужом приложении.... [D5, Win95/98, Win2k, WinXP]
TankMan © (2002-12-18 01:19:00)Я знаю, что сдесь были темы подобные, но поиск сдесь.... вобщем "не работает"... хотел узнать...что я делаю не так?
Вобщем я пытаюсь нажать на кнопку в приложении...
var x:string;
hbutton:hwnd;
begin
hbutton:=findwindow(nil,"Any Title");
....
x:=inttohex(30,0); //координаты По вертикали
if length(x)<3 then x:=x+"0";
if length(x)<3 then x:=x+"0";
x:=x+inttohex(30,3); // /70 ropu3oHTA/1u
SendMessage(hbutton,WM_MOUSEMOVE,0,strtoint("$"+x));
SendMessage(hbutton,WM_LBUTTONDOWN,1,strtoint("$"+x));
SendMessage(hbutton,WM_LBUTTONUP,0,strtoint("$"+x));
....
Вобщем все... проверял на другой моей программке, которая обрабатывает эти сообщения - она их получает, но вот нажиматься кнопка даже и не думает...
Вот я хотел и узнать, как сделать так, чтобы приложение реагировало всетаки... я вобщем-то догадываюсь, что я нажимаю на саму форму, т.е. под кнопкой происходит нажатие на кнопку... а как тогда сделать, чтобы он кликал именно по тому что находится по этим координатам?...
TankMan (2003-01-22 10:01:00) [1](Ох... наконец-то вышел нормально в инет)
... в продолжение темы...
>>Avsam
А как мне найти хендл кнопки, если я не знаю, как она называется, какого она типа, и вообще кнопка ли это или просто панелька реагирующая на нажатие мышки?
Вообще, как-то можно найти хендл компонента по его координатам?Или нет?
>>MARcoDEN
Ну если принципиально.. у меня написано точно также... только я проследний параметр sendmessage записываю подругому...
MARcoDEN (2003-01-12 12:29:00) [2]var x,y:Integer;
begin
x:=random(300);
y:=random(200);
sendmessage(Handle,WM_LBUTTONDOWN,MK_LBUTTON,x+y shl 16);
sendmessage(Handle,WM_LBUTTONUP,MK_LBUTTON,x+y shl 16);
Avsam (2003-01-11 21:03:00) [3]> TankMan
> Куда подавать BM_CLICK? На саму форму?
Найди Handle кнопки и на нее подай BM_Click.
TankMan (2002-12-28 05:38:00) [4]>>Song
Куда подавать BM_CLICK? На саму форму?
Каспер (2002-12-27 10:08:00) [5]2 СОНГ С этого все начинают когда первый раз приходиться с чужими окнами работать...
Зато потом основные действия проходят на 5
Song (2002-12-27 08:31:00) [6]Передавайте BM_CLICK и не мучайтесь.
Каспер (2002-12-27 08:17:00) [7]А нафига мышой кликать? :))))))))))))))))
Сам сначала так делал...
Потом просто переносил фокус на нужный компонент предварительно его отыскав
а потом посылал сообщение - НАЖАТИЕ ЕНТЕРА :)
TankMan (2002-12-27 05:49:00) [8]>>Dm9
Да я уж понял, что кликаю по форме, но как найти тогда кнопку, есля я не знаю, ее имени и типа... ну с типом можно поэкспериментировать, а вот с именем - уже проблема, и еще, ты говоришь, что координаты не в lparam и wparam, а только в wparam - а я разве утверждал обратное? В моем примере, как раз так и сделано...
Может есть какой-то путь найти незивестного типа кнопку?
Dimka Maslov (2002-12-18 10:43:00) [9]mouse_event
Dm9 (2002-12-18 02:01:00) [10]Кстати, у тебя ведь в хбаттон не хандл кнопки. Для получения дескриптора кнопочки надо использовать
FindWindowEx или EnumChildWindows
А так ты действительно кликаешь по форме, находящейся под кнопкой
Dm9 (2002-12-18 01:58:00) [11]wparam и lparam - это не координаты. Координаты - в wparam
По иксу - в младшем, по игреку - в старшем слове параметра wparam. Или наоборот - икс в старшем - не помню, сам поэкспериментируй.
В общем, это будет выглядеть так:
SendMessage (C, WM_LBUTTONUP, X shl 16 + Y, 0);
или
SendMessage (C, WM_LBUTTONUP, Y shl 16 + X, 0); - тут сам поэкспериментируй, поймёшь. Собственно, при нажатии на кнопку это роли не играет. ставишь координаты 1,1 - и всё работает:
SendMessage (C, WM_LBUTTONUP, 1 shl 16 + 1, 0);