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
告诉您wParam
和lParam
是否包含有效数据。如果nCode
是HC_ACTION
(0),那么他们会这样做,否则他们不会。这在the documentation中有明确说明:
nCode [输入] 类型:
int
钩子程序用来确定如何处理消息的代码。 如果 nCode 小于零,则挂钩过程必须将消息传递给
CallNextHookEx
函数而不进行进一步处理,并应返回CallNextHookEx
返回的值。该参数可以是下列值之一。HC_ACTION 0
wParam
和lParam
参数包含有关键盘消息的信息。wParam [in] 类型:
WPARAM
键盘消息的标识符。此参数可以是以下消息之一:
WM_KEYDOWN
、WM_KEYUP
、WM_SYSKEYDOWN
或WM_SYSKEYUP
。lParam [in] 类型:
LPARAM
指向
KBDLLHOOKSTRUCT
结构的指针。
【讨论】:
以上是关于C++ 键盘钩子 - 参数 nCode 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章