Форум: "WinAPI";
Текущий архив: 2003.03.13;
Скачать: [xml.tar.bz2];
ВнизКак имитировать нажатие мышки в чужом приложении.... Найти похожие ветки
← →
TankMan (2002-12-18 01:19) [0]Я знаю, что сдесь были темы подобные, но поиск сдесь.... вобщем "не работает"... хотел узнать...что я делаю не так?
Вобщем я пытаюсь нажать на кнопку в приложении...
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));
....
Вобщем все... проверял на другой моей программке, которая обрабатывает эти сообщения - она их получает, но вот нажиматься кнопка даже и не думает...
Вот я хотел и узнать, как сделать так, чтобы приложение реагировало всетаки... я вобщем-то догадываюсь, что я нажимаю на саму форму, т.е. под кнопкой происходит нажатие на кнопку... а как тогда сделать, чтобы он кликал именно по тому что находится по этим координатам?...
← →
Dm9 (2002-12-18 01:58) [1]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);
← →
Dm9 (2002-12-18 02:01) [2]Кстати, у тебя ведь в хбаттон не хандл кнопки. Для получения дескриптора кнопочки надо использовать
FindWindowEx или EnumChildWindows
А так ты действительно кликаешь по форме, находящейся под кнопкой
← →
Dimka Maslov (2002-12-18 10:43) [3]mouse_event
← →
TankMan (2002-12-27 05:49) [4]>>Dm9
Да я уж понял, что кликаю по форме, но как найти тогда кнопку, есля я не знаю, ее имени и типа... ну с типом можно поэкспериментировать, а вот с именем - уже проблема, и еще, ты говоришь, что координаты не в lparam и wparam, а только в wparam - а я разве утверждал обратное? В моем примере, как раз так и сделано...
Может есть какой-то путь найти незивестного типа кнопку?
← →
Каспер (2002-12-27 08:17) [5]А нафига мышой кликать? :))))))))))))))))
Сам сначала так делал...
Потом просто переносил фокус на нужный компонент предварительно его отыскав
а потом посылал сообщение - НАЖАТИЕ ЕНТЕРА :)
← →
Song (2002-12-27 08:31) [6]Передавайте BM_CLICK и не мучайтесь.
← →
Каспер (2002-12-27 10:08) [7]2 СОНГ С этого все начинают когда первый раз приходиться с чужими окнами работать...
Зато потом основные действия проходят на 5
← →
TankMan (2002-12-28 05:38) [8]>>Song
Куда подавать BM_CLICK? На саму форму?
← →
Avsam (2003-01-11 21:03) [9]> TankMan
> Куда подавать BM_CLICK? На саму форму?
Найди Handle кнопки и на нее подай BM_Click.
← →
MARcoDEN (2003-01-12 12:29) [10]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);
← →
TankMan (2003-01-22 10:01) [11](Ох... наконец-то вышел нормально в инет)
... в продолжение темы...
>>Avsam
А как мне найти хендл кнопки, если я не знаю, как она называется, какого она типа, и вообще кнопка ли это или просто панелька реагирующая на нажатие мышки?
Вообще, как-то можно найти хендл компонента по его координатам?Или нет?
>>MARcoDEN
Ну если принципиально.. у меня написано точно также... только я проследний параметр sendmessage записываю подругому...
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.03.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.193 c