我正在尝试创建一个 DLL,以便(全局)挂钩击键并将它们发送到我的应用程序。一切正常(挂钩,消息传递等)。我唯一的问题是我无法返回左右虚拟键的代码(VK_LSHIFT、VK_RSHIFT、VK_LCONTROL 等)。
我花了几个小时阅读有关 KeyboardProc、VkKeyScan、MapVirtualKey 等的 msdn,但无法找到解决方案。这是我的代码:
function HookCallBack(Code: Integer; wParam: WPARAM; lParam: LPARAM): LongInt; stdcall;
begin
Result := 0;
if (Code < HC_ACTION) then Exit;
if (Code = HC_NOREMOVE) then Result := CallNextHookEx(Keyboard, Code, wParam, lParam);
if (Code = HC_ACTION) then begin
PostMessage(Reciever, WM_USER + 1, wParam, lParam);
Result := CallNextHookEx(Keyboard, Code, wParam, lParam);
end;
end;
LParam
我相信它必须根据这个链接做一些事情,但我仍然无法弄清楚。
先感谢您。
编辑:在这个问题上花了很多时间后,我发现LParamHi
返回的代码类似于linux 键码表,它能够发送每个键的不同代码。例如 LSHIFT = 42, RSHIFT = 54, LCTRL = 29, RCTRL = 29+256(?) 等等。我现在正试图弄清楚这些小细节。