Сейчас на форуме: hgdagon, asfa, bartolomeo (+4 невидимых)

 eXeL@B —› Программирование —› Эмуляция кликом мышки
Посл.ответ Сообщение

Ранг: 122.2 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 22 января 2007 00:29
· Личное сообщение · #1

Всем привет.

Я хочу программно эмулировать клик мышкой в окне другого процесса. Думал что просто достаточно сделать

PostMessage(hWindow, WM_BUTTONDOWN, MK_LBUTTON, MakeLong(x,y));
PostMessage(hWindow, WM_BUTTONUP, MK_LBUTTON, MakeLong(x,y));

только нифига не получается так. Из Spy++ видно что окнополучает нужное событие только не реагирует на него.

В чем может быть проблема?



Ранг: 228.7 (наставник), 2thx
Активность: 0.120
Статус: Участник
malware research

Создано: 22 января 2007 01:09
· Личное сообщение · #2

egorovshura
юзай mouse_event http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/mouseinput/mouseinputreference/mouseinputfunctions/mouse_event.asp функцию, видел такое в одном червяке

-----
Research is my purpose




Ранг: 22.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 22 января 2007 01:10
· Личное сообщение · #3

юзай SendInput



Ранг: 122.2 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 22 января 2007 01:18
· Личное сообщение · #4

спасибки! mouse_event работает. SendInput не пробовал, но думаю тоже проблем не будет, они вроде похожи по описанию.
но все таки непонятно почему вариант с пост ивентом не фурычит. может кто знает.



Ранг: 36.0 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 22 января 2007 01:22
· Личное сообщение · #5

egorovshura А где берём дескриптор перед окна?

Например это работает.
HWND hWnd;
hWnd=::FindWindow(NULL,"заголовок");
PostMessage( hWnd,WM_QUIT, 0, 0 );



Ранг: 122.2 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 22 января 2007 02:56
· Личное сообщение · #6

atoll пишет:
Например это работает.
HWND hWnd;
hWnd=::FindWindow(NULL,"заголовок");
PostMessage( hWnd,WM_QUIT, 0, 0 );


Это работает. А Mouse Button UP/DOWN нет. видимо зависит еще от того как приложение события обрабатывает. Дескриптор беру примерно так же. Через FindWindow и FindWindowEx.



Ранг: 5.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 22 января 2007 03:30 · Поправил: Mavka
· Личное сообщение · #7

<удалил>



Ранг: 200.3 (наставник)
Активность: 0.090
Статус: Участник

Создано: 22 января 2007 03:44
· Личное сообщение · #8

По-моему аутпост такое блокирует, и если вы хотите это применить в "таких" целях, то недолжно получится, а если для себя то способы есть и давно известны (гугл рулит).

-----
Само плывет в pуки только то, что не тонет.




Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 22 января 2007 03:55
· Личное сообщение · #9

egorovshura пишет:
Дескриптор беру примерно так же.

А кликаешь на чем. Если на контроле - значит окно берет координаты мышки не из параметров и не посылает событие контролу. Посылай на дескриптор контрола - это надежнее. Или эмулируй тщательней - с координатами.



Ранг: 20.8 (новичок)
Активность: 0.010
Статус: Участник

Создано: 22 января 2007 05:01
· Личное сообщение · #10

Вообще нужно в Spy++ посмотреть все сообщения, которые посылаются при реальном клике.
Когда я равлекался с клавиатурой - то необходимо было сначала установить фокус (WM_SETFOCUS), по-моему еще активизировать (WM_ACTIVATE), и потом уже слать WM_KEYDOWN и т.д.



Ранг: 122.2 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 22 января 2007 08:13
· Личное сообщение · #11

Player пишет:
Вообще нужно в Spy++ посмотреть все сообщения, которые посылаются при реальном клике.
Когда я равлекался с клавиатурой - то необходимо было сначала установить фокус (WM_SETFOCUS), по-моему еще активизировать (WM_ACTIVATE), и потом уже слать WM_KEYDOWN и т.д.


Да я так и делал: смотрел какие в реальности события шлются окну и потом слал такие же. Причем даже сделал плавный подход мышки, т.е. много событий MouseMove с постепенным приращением координат, только работать не хочет все равно, в Spy++ вижу что все мои события доходят с нужными параметрами.
Видать какое-то главное событие пропустил


 eXeL@B —› Программирование —› Эмуляция кликом мышки
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати