#include
#include
LRESULT CALLBACK myproc(int code, WPARAM w, LPARAM l){
PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)l;
const char* info = NULL;
if (w == WM_KEYDOWN)
info = "按下";
else if (w == WM_KEYUP)
info = "弹起";
else if (w == WM_SYSKEYDOWN)
info = "按下系统按键";
else if (w == WM_SYSKEYUP)
info = "弹起系统按键";
printf("%s - 虚拟码 [%04x], 扫描码 [%04x] 标志 [%04x]\n", info, p->vkCode, p->scanCode,p->flags);
// 消息时间戳 [%d] 附加信息 [%p] ,p->time,p->dwExtraInfo
return CallNextHookEx(myproc, code, w, l);
}
int main(int argc, PCHAR argv[]){
HHOOK kbhook;
kbhook = SetWindowsHookEx(WH_KEYBOARD_LL, myproc, GetModuleHandle(NULL), 0);
if (kbhook == NULL){
printf("SetWindowsHookEx failed %d\n", GetLastError());
}
//消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
};
UnhookWindowsHookEx(kbhook);
getchar();
return 0;
}
效果图