Пытаюсь отловить сообщение таким способом:
| Код | LRESULT CSongCatcherDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) { if(message == HM_KEYPRESSED) MessageBox(_T("Abirvalg")); return CDialog::DefWindowProc(message, wParam, lParam); }
|
Hook.dll:
| Код | // dllmain.cpp : Defines the entry point for the DLL application. #include "stdafx.h" #include "hook.h"
HANDLE g_hMod; HHOOK g_hhookKbd; HWND g_hMainWnd;
LRESULT CALLBACK HookProc (int nCode, WPARAM wParam, LPARAM lParam); #define HM_KEYPRESSED WM_USER+200
BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { g_hMod = hModule;
switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; }
void h_Init(HWND hWnd) { g_hMainWnd = hWnd; g_hhookKbd = SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)HookProc,(HINSTANCE)g_hMod,0); }
void h_Release () { UnhookWindowsHookEx(g_hhookKbd); }
LRESULT CALLBACK HookProc (int nCode, WPARAM wParam, LPARAM lParam) { if (nCode == HC_ACTION && !(lParam & 0x80000000)) { if ((GetKeyState(VK_LCONTROL) & 0x8000) && (GetKeyState(VK_LSHIFT) & 0x8000) && (GetKeyState(0x31) & 0x8000)) // 1 key { SendMessage(g_hMainWnd,HM_KEYPRESSED,wParam,lParam); } } return CallNextHookEx(g_hhookKbd,nCode,wParam,lParam); }
|
проинициализировал так:
| Код | BOOL CSongCatcherDlg::OnInitDialog() { ... h_Init(this->m_hWnd); ... return TRUE; // return TRUE unless you set the focus to a control }
|
почему приложение получает сообщение только когда оно активно и не получает когда не активна хотя хукер срабатывает??
|