Вот как я инициализирую RAW INPUT
, чтобы глобально перехватывать события мыши и клавиатуры.Большое преимущество по сравнению с хуками в том, что вам не нужна DLL.Вы обрабатываете необработанные входные события в оконной процедуре с помощью WM_INPUT
.Для получения дополнительной информации: RAW INPUT
#include <Windows.h>
const USHORT HID_MOUSE = 2;
const USHORT HID_KEYBOARD = 6;
bool HID_RegisterDevice(HWND hTarget, USHORT usage)
{
RAWINPUTDEVICE hid;
hid.usUsagePage = 1;
hid.usUsage = usage;
hid.dwFlags = RIDEV_DEVNOTIFY | RIDEV_INPUTSINK;
hid.hwndTarget = hTarget;
return !!RegisterRawInputDevices(&hid, 1, sizeof(RAWINPUTDEVICE));
}
void HID_UnregisterDevice(USHORT usage)
{
RAWINPUTDEVICE hid;
hid.usUsagePage = 1;
hid.usUsage = usage;
hid.dwFlags = RIDEV_REMOVE;
hid.hwndTarget = NULL;
RegisterRawInputDevices(&hid, 1, sizeof(RAWINPUTDEVICE));
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR cmd_line, int cmd_show)
{
WNDCLASS wc;
...
RegisterClass(&wc);
HWND hwnd = CreateWindow(...);
...
HID_RegisterDevice(hwnd, HID_KEYBOARD);
HID_RegisterDevice(hwnd, HID_MOUSE);
MSG msg;
while(GetMessage(&msg, NULL, 0, 0))
{
...
}
HID_UnregisterDevice(HID_MOUSE);
HID_UnregisterDevice(HID_KEYBOARD);
return (int) msg.wParam;
}