Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.02.07;
Скачать: CL | DM;

Вниз

Перехват WM_LBUTTONDOWN в конкретном приложении   Найти похожие ветки 

 
Nucer   (2008-12-05 13:35) [0]

Есть приложение, которое загружает мою DLL при запуске. Необходимо перехватывать нажатия мыши в этом приложении и если единственное окно в данный момент неактивно (сравнить GetWindowThreadProcessId+GetForegroundWindow с GetCurrentProcessId), то блокировать сообщение (или в крайнем случае закрывать приложение). Как это можно реализовать?

Подойдет ли локальный SetWindowsHookEx c WH_MOUSE? Или для этого надо выполнить SetWindowsHookEx в потоке, обслуживающем то самое конкретное окно? Если ставить глобальный хук, то GetCurrentProcessId будет возвращать pid процесса, получившего сообщение (и невозможно будет получить pid приложения, загрузившего dll)?

Подскажите в какую сторону копать.


 
Сергей М. ©   (2008-12-05 13:45) [1]


> Подойдет ли локальный SetWindowsHookEx c WH_MOUSE?


Подойдет только для мониторинга.
Но есть сомнение, что установка хука будет корректа в контексте выполнения DllMain.


> для этого надо выполнить SetWindowsHookEx в потоке, обслуживающем
> то самое конкретное окно?


Не обязательно.


 
Leonid Troyanovsky ©   (2008-12-05 14:28) [2]


> Сергей М. ©   (05.12.08 13:45) [1]

> > Подойдет ли локальный SetWindowsHookEx c WH_MOUSE?

> Подойдет только для мониторинга.

"Проглотить" может хоть WH_GETMESSAGE.
Ну, или, наверняка, WH_MOUSE_LL.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2008-12-05 14:31) [3]


> Leonid Troyanovsky ©   (05.12.08 14:28) [2]

> > > Подойдет ли локальный SetWindowsHookEx c WH_MOUSE?

Локальный никак не подойдет, sorry.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2008-12-05 14:36) [4]


> Nucer   (05.12.08 13:35)  

> GetCurrentProcessId будет возвращать pid процесса, получившего
> сообщение (и невозможно будет получить pid приложения, загрузившего
> dll)?

Pid легко передать в хуковую функцию в случае WH_GETMESSAGE.
Ну, или, в dwExtraInfo, в случае WH_MOUSE.

--
Regards, LVT.


 
Nucer   (2008-12-05 14:44) [5]

Спасибо за ответы.

Установить локальный Hook в DLLMain получилось. Сообщения перехватываются (если надо, блокирую через HC_SKIP).
hHook := SetWindowsHookEx(WH_MOUSE, @MouseProc, 0, GetCurrentThreadId);

Но основная цель - запретить эмуляцию нажатий в неактивном окне через SendMessage. Так вот почему-то сообщения, отправленные через SendMessage не перехватываются. Почему так происходит и как с этим бороться?


 
Nucer   (2008-12-05 16:25) [6]

Разобрался. Чтобы ловить SendMessage надо ставить хук WH_CALLWNDPROC. А как отловить PostMessage?


 
Leonid Troyanovsky ©   (2008-12-05 16:27) [7]


> Nucer   (05.12.08 14:44) [5]

> Но основная цель - запретить эмуляцию нажатий в неактивном
> окне через SendMessage.

Нажатия эмулируются через Post..Message.

Для того, чтобы влиять на ввод чужих потоков хуком
без использования длл требуется WH_MOUSE_LL hook.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2008-12-05 16:30) [8]


> Nucer   (05.12.08 16:25) [6]

>  А как отловить PostMessage?

WH_GETMESSAGE.

--
Regards, LVT.


 
Nucer   (2008-12-05 16:34) [9]

Спасибо, сделал, все работает.


 
Nucer   (2008-12-06 13:25) [10]

Еще один вопрос. Возможно ли отличить реальное нажатие клавиши от сэмулированного посылкой PostMessage?


 
Rouse_ ©   (2008-12-06 14:14) [11]


> Возможно ли отличить реальное нажатие клавиши от сэмулированного
> посылкой PostMessage?

GetKeyState



Страницы: 1 вся ветка

Текущий архив: 2010.02.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
15-1259644584
d@nger
2009-12-01 08:16
2010.02.07
проблема с UserGate и сервером


15-1259930302
@!!ex
2009-12-04 15:38
2010.02.07
Есть спецы в программирования для Win Mobile?


15-1259596015
Keep
2009-11-30 18:46
2010.02.07
ОС x64 и 32 битные программы


15-1259650355
Дмитрий С
2009-12-01 09:52
2010.02.07
Особенности функции feof в php под windows.


3-1234183945
Ulugbek
2009-02-09 15:52
2010.02.07
Помагите мне как филтьровать в Ehlib DbGridEh IbClientdatset