【发布时间】:2021-02-03 12:18:26
【问题描述】:
我正在为一个 c++ 项目编写一个键盘钩子。我找到了一些代码,但在没有完全理解的情况下不想使用它:
HHOOK _hook;
KBDLLHOOKSTRUCT kbdStruct;
LRESULT __stdcall HookCallback(int ncode, WPARAM wParam, LPARAM lparam)
{
if(ncode>=HC_ACTION)
{
if((wParam == WM_KEYDOWN) || (wParam == WM_SYSKEYDOWN))
{
kbdStruct = *((KBDLLHOOKSTRUCT*)lParam);
DWORD dwMsg = 1;
dwMsg += kbdStruct.scanCode << 16;
dwMsg += kbdStruct.flags << 24;
char key[16];
GetKeyNameText(dwMsg,key,15);
if((GetKeyNameState(VK_CAPITAL)& 0x0001) == 0)
{
for (int i=0; i<10)key[i] = tolower(key[i]);
ReturnKeyPressed(key);
}
else
{
ReturnKeyPressed(key);
}
}
}
return CallNextHookEx(_hook,nCode,wParam,lParam);
}
void SetHook()
{
_hook = SetWindowsHookEx(WH__KEYBOARD_LL,HookCallback,Null,0);
}
我不明白这里的 nCode 是什么。其他参数从何而来? 来自绝对 C++ 初学者的问候:)。
【问题讨论】:
标签: c++ winapi keyboard hook keylogger