C++ 键盘钩子 - 参数 nCode 是啥意思?

Posted

技术标签:

【中文标题】C++ 键盘钩子 - 参数 nCode 是啥意思?【英文标题】: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++ 初学者的问候:)。

【问题讨论】:

你可以在这里找到它:docs.microsoft.com/en-us/previous-versions/windows/desktop/… 【参考方案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 结构的指针。

【讨论】:

以上是关于C++ 键盘钩子 - 参数 nCode 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

DELPHI中的钩子是啥?

c++实现键盘记录仪(键盘钩子)

C++怎样简单实现全局钩子或者键盘监控

利用debug钩子拦截全局钩子,经典反黑客技术

C++非阻塞键盘缓冲区输入检测或读取函数是啥?

while(cin)是啥意思(C++)