| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Хук на смену активного окна |
| Автор: TechnoMag 19.9.2013, 18:46 | ||
Пробовал: WH_MSGFILTER, WH_SYSMSGFILTER, WH_SHELL
Хук создается в оконном приложении в основном потоке. Никаких Dll. |
| Автор: Illusion Dolphin 19.9.2013, 19:17 | ||
If the function succeeds, the return value is the handle to the hook procedure. If the function fails, the return value is NULL. To get extended error information, call GetLastError. 1) Надо бы сохранять оригинальный указатель 2) Надо бы посмотреть что не так если его нету |
| Автор: TechnoMag 20.9.2013, 10:29 | ||
| GetLastError возвращает код ошибки 1428. А так, ShellProc реагирует, если активным становится окно собственного процесса.
|
| Автор: Illusion Dolphin 20.9.2013, 10:58 | ||
Ну конечно посмотреть что такое 1428 было очень сложно: ERROR_HOOK_NEEDS_HMOD 1428 (0x594) Cannot set nonlocal hook without a module handle. http://stackoverflow.com/questions/12357705/setwindowshookex-fails-with-error-1428 Т.е. надо указывать нужный модуль, а не текущий вроде как |
| Автор: TechnoMag 20.9.2013, 11:41 |
| Какой модуль? DLL? Ведь хук я создаю в основном процессе, а не в DLL. |
| Автор: Illusion Dolphin 20.9.2013, 11:47 | ||
Чтобы ловить другие приложения нужно DLL |
| Автор: TechnoMag 20.9.2013, 12:36 |
| Хм. Почему для хука на мышь и клавиатуру не нужно Dll? По крайней мере не обязательно. Проверял на Win7 и Xp - работают. |
| Автор: Illusion Dolphin 20.9.2013, 13:08 | ||
Может это в MSDN объясняет: For a specified hook type, thread hooks are called first, then global hooks. Be aware that the WH_MOUSE, WH_KEYBOARD, WH_JOURNAL*, WH_SHELL, and low-level hooks can be called on the thread that installed the hook rather than the thread processing the hook. |
| Автор: TechnoMag 20.9.2013, 14:55 | ||||
| Попробовал сделать в DLL. Опять же, реагирует только на саму себя. Почему-то постепенно валит все приложения в системе, включая службы.
|
| Автор: TechnoMag 20.9.2013, 21:37 | ||
http://www.free-notes.ru/?p=200
Пробовал и WH_MGSFILTER. Причем не в DLL, не в самом приложении не работает. |
| Автор: TechnoMag 21.9.2013, 18:38 |
| http://www.delphisources.ru/pages/sources/system/2008-year/shell-hook.html На Win 7 64 почему-то реагирует не на все окна. |