Comments 9
А не лучше ли было сделать псевдополноэкранный режим? То есть просто растягуть окно поверх всего включая панель задач.
Можно упростить. Вам не нужна DLL с хуком.

— для отслеживания активного приложения можно пользоваться RegisterShellHookWindow и ловить событие HSHELL_WINDOWACTIVATED.
— чтобы поймать мышь используйте SetWindowsHookEx(WH_MOUSE_LL, HookProc, nullptr, 0); Lowl-lewel mouse hook, установленный таким образом, будет вызывается в контексте вашего процесса, не важно в каком процессе событие произошло. MSDN says: «This hook is called in the context of the thread that installed it. The call is made by sending a message to the thread that installed the hook. Therefore, the thread that installed the hook must have a message loop.»
После этих изменений длл можно убирать.

И еще по мелочи:

— вам не нужно хранить хэндл хука, в глобальных переменных, CallNextHookEx можно вызывать c nullptr в качестве первого параметра
— лучше использовать nullptr вместо NULL, С++0x же
— так луче не делать: PostMessage(g_hWndSrv, WM_ACTIVATE, swpStruct->wParam, swpStruct->lParam); У окна есть свои сообщения с такими кодами, и лучше не мешать их с чужими. Задефайнте что-нибудь кастомное WM_USER+ и посылайте его.
— hWndSrv сделайте WS_CHILD of HWND_MESSAGE
— пользуйтесь W-функциями, А-шки остались в ОС только для backward compatibility.
Спасибо.
Добавлю чуть позже в солюшен отдельный проект для реализации low-level hook версии.
Что касается мелочей, то вы правы, следует причесать код.
Не за что. Когда будете ll хук писать, из него тоже посылайте сообщение, хотя он и в вашем процессе. Дело в том, что код ll хука time-critical. Если он будет выполняться более 200ms, хук будет удален из chain'а хуков системой и никогда больше не вызовется.
Only those users with full accounts are able to leave comments. Log in, please.