Delphi Xe2:WH#u键盘赢得';t返回左右虚拟钥匙代码
我正在尝试创建一个DLL,以便(全局)钩住按键笔划并将它们发送到我的应用程序。一切正常(挂钩、发短信等)。我唯一的问题是无法返回左右虚拟键的代码(VK_LSHIFT、VK_RSHIFT、VK_LCONTROL等) 我花了几个小时阅读了有关KeyboardProc、VkKeyScan、MapVirtualKey等的msdn。。没有办法解决问题。这是我的密码:Delphi Xe2:WH#u键盘赢得';t返回左右虚拟钥匙代码,delphi,hook,virtual-keyboard,Delphi,Hook,Virtual Keyboard,我正在尝试创建一个DLL,以便(全局)钩住按键笔划并将它们发送到我的应用程序。一切正常(挂钩、发短信等)。我唯一的问题是无法返回左右虚拟键的代码(VK_LSHIFT、VK_RSHIFT、VK_LCONTROL等) 我花了几个小时阅读了有关KeyboardProc、VkKeyScan、MapVirtualKey等的msdn。。没有办法解决问题。这是我的密码: function HookCallBack(Code: Integer; wParam: WPARAM; lParam: LPARAM):
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;
函数HookCallBack(代码:Integer;wParam:wParam;lParam:lParam):LongInt;stdcall;
开始
结果:=0;
如果(代码
我相信它必须与LParam
有关,但我仍然无法理解
先谢谢你
编辑:在这个问题上花了很多时间之后,我发现
LParamHi
返回的代码与能够发送每个键的不同代码的代码类似。例如,LSHIFT=42,RSHIFT=54,LCTRL=29,RCTRL=29+256(?)等等。我现在正试图弄清楚这些小细节。Shift,Alt,Ctrl-不是一个键。这是一个密钥修改器,这些密钥没有自己的真正密钥代码。只有按下其他非修改键,您才能真正检测到它们
请参阅TWinControl实现以了解如何检测这些密钥:
function TWinControl.DoKeyDown(var Message: TWMKey): Boolean;
var
ShiftState: TShiftState;
Form, FormParent: TCustomForm;
LCharCode: Word;
begin
...
with Message do
begin
ShiftState := KeyDataToShiftState(KeyData); //see this method.
if not (csNoStdEvents in ControlStyle) then
begin
LCharCode := CharCode;
KeyDown(LCharCode, ShiftState);
CharCode := LCharCode;
if LCharCode = 0 then Exit;
end;
end;
Result := False;
end;
我希望我能投你的票,但上面说我需要15个声誉:)不管怎样,我认为他们有自己的代码(从0xA0到0xA5),所以我试图捕捉它们。但无论如何,它们总是返回0x10(shift)、0x11(ctrl)、0x12(alt)。谢谢您的回复:)