#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;
}
效果圖