使用c语言调用hook函数完成全局键盘监听,打印出监听到的每一个字符
时间: 2023-01-11 11:55:36 浏览: 137
C#全局鼠标键盘Hook
在 Windows 系统中,可以使用 SetWindowsHookEx 函数来设置钩子,来监听键盘事件。需要注意的是,调用该函数需要使用 Windows API。下面是一个简单的例子:
```
#include <windows.h>
#include <stdio.h>
#pragma comment(lib, "user32.lib")
HHOOK g_hHook = NULL;
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode >= 0)
{
KBDLLHOOKSTRUCT* p = (KBDLLHOOKSTRUCT*)lParam;
char ch = (char)p->vkCode;
printf("%c\n", ch);
}
return CallNextHookEx(g_hHook, nCode, wParam, lParam);
}
int main()
{
g_hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, NULL, 0);
if (g_hHook == NULL)
{
printf("Failed to set hook!\n");
return 1;
}
printf("Press any key to quit.\n");
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
UnhookWindowsHookEx(g_hHook);
return 0;
}
```
上面的代码会在每次按键时打印出该字符。需要注意的是,钩子函数 KeyboardProc 会在另一个线程中调用,所以需要使用 GetMessage、TranslateMessage、DispatchMessage 来处理消息。
阅读全文