【问题标题】:C++ keyboard hook - what does the parameter nCode mean?C++ 键盘钩子 - 参数 nCode 是什么意思?
【发布时间】: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


【解决方案1】:

简而言之,nCode 告诉您wParamlParam 是否包含有效数据。如果nCodeHC_ACTION (0),那么他们会这样做,否则他们不会。这在the documentation中有明确说明:

  • nCode [输入]
    类型:int

    钩子程序用来确定如何处理消息的代码。 如果 nCode 小于零,则挂钩过程必须将消息传递给 CallNextHookEx 函数而不进行进一步处理,并应返回 CallNextHookEx 返回的值。该参数可以是下列值之一。

    HC_ACTION
    0

    wParamlParam 参数包含有关键盘消息的信息。

  • wParam [in]
    类型:WPARAM

    键盘消息的标识符。此参数可以是以下消息之一:WM_KEYDOWNWM_KEYUPWM_SYSKEYDOWNWM_SYSKEYUP

  • lParam [in]
    类型:LPARAM

    指向KBDLLHOOKSTRUCT 结构的指针。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    相关资源
    最近更新 更多