1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
| #include "Hook.h"
static UINT uMsg = 0;
static HWND hWndMain = 0;
static HHOOK hKeyHook = NULL;
HINSTANCE hInstance = 0;
HOOKPROC lpfnHookProc = 0;
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
hInstance = hModule;
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return true;
}
HOOK_API bool InstallHook(HWND hWnd, UINT uMyMsg)
{
hWndMain = hWnd;
uMsg = uMyMsg;
lpfnHookProc = (HOOKPROC)KeyboardFunc;
hKeyHook = SetWindowsHookEx (WH_KEYBOARD, lpfnHookProc, hInstance, NULL);
hWndMain = hWnd;
if (hKeyHook)
{
return true;
}
else
{
return false;
}
}
HOOK_API bool UninstallHook()
{
return UnhookWindowsHookEx(hKeyHook);
}
HOOK_API LRESULT KeyboardFunc (int nCode, WPARAM wParam, LPARAM lParam)
{
bool Processed = false;
if (nCode < 0)
{
return (CallNextHookEx (hKeyHook, nCode, wParam, lParam));
}
if (nCode == HC_NOREMOVE)
{
return (CallNextHookEx (hKeyHook, nCode, wParam, lParam));
}
switch (wParam)
{
case VK_UP:
case VK_DOWN:
if (HIWORD(lParam) & 0xC000)
{
// keydown
}
else
{
// keyup
PostMessage (hWndMain, uMsg, 0, 0);
}
Processed = true;
break;
default :
Processed = false ;
break ;
}
if (Processed)
{
return true;
}
else
{
return (CallNextHookEx (hKeyHook, nCode, wParam, lParam));
}
} |
Partager