Форум: "WinAPI";
Текущий архив: 2010.02.07;
Скачать: [xml.tar.bz2];
ВнизПерехват 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2010.02.07;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c