Mar*_*ogs 3 c++ keyboard hook winapi keylogger
我正在寻找为 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);
}
Run Code Online (Sandbox Code Playgroud)
我不明白 nCode 是什么。其他参数从哪里来?来自绝对 C++ 初学者的问候:)。
简而言之,nCode告诉您 和wParam是否lParam包含有效数据。如果nCode是HC_ACTION(0),那么他们就这样做,否则他们就不会。文档中明确说明了这一点:
nCode [输入]
类型:int挂钩过程用来确定如何处理消息的代码。如果nCode小于零,则挂钩过程必须将消息传递给
CallNextHookEx函数而不进行进一步处理,并且应返回 所返回的值CallNextHookEx。该参数可以是以下值之一。HC_ACTION
0和
wParam参数lParam包含有关键盘消息的信息。wParam [输入]
类型:WPARAM键盘消息的标识符。该参数可以是以下消息之一:
WM_KEYDOWN、WM_KEYUP、WM_SYSKEYDOWN或WM_SYSKEYUP。lParam [输入]
类型:LPARAM指向结构的指针
KBDLLHOOKSTRUCT。
| 归档时间: |
|
| 查看次数: |
1082 次 |
| 最近记录: |