キーストロークを (グローバルに) フックしてアプリケーションに送信するために、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
によると、何かをしなければならないと思いますが、まだ理解できません。
前もって感謝します。
編集:この問題に何時間も費やした後、LinuxキーコードテーブルLParamHi
に似たコードを返し、これらの各キーの異なるコードを送信できることがわかりました。たとえば、LSHIFT = 42、RSHIFT = 54、LCTRL = 29、RCTRL = 29+256(?) などです。現在、これらの小さな詳細を理解しようとしています。