Я пытаюсь создать DLL для того, чтобы (глобально) нажимать клавиши и отправлять их в мое приложение. Все работает нормально (перехват, обмен сообщениями и т. Д.). Единственная проблема, с которой я сталкиваюсь, это то, что я не могу вернуть коды виртуальных ключей слева-справа (VK_LSHIFT, VK_RSHIFT, VK_LCONTROL и т. Д.).Delphi Xe2: WH_KEYBOARD не возвращает коды виртуального ключа влево-вправо
Я потратил несколько часов на чтение msdn о KeyboardProc, VkKeyScan, MapVirtualKey и т. Д., Не имея возможности сделать решение. Вот мой код:
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
согласно this link, но я до сих пор не в состоянии понять это.
Заранее спасибо.
Редактировать: Проведя много часов на этой проблеме, я узнал, что LParamHi
возвращает коды, похожие на linux keycode table, которые могут отправлять разные коды каждого из этих ключей. Например, LSHIFT = 42, RSHIFT = 54, LCTRL = 29, RCTRL = 29 + 256 (?) И т. Д. Теперь я пытаюсь выяснить эти мелкие детали.
Я хотел бы голосовать за вас, но он говорит, что мне нужно 15 репутации :) Во всяком случае, я думал, что у них есть свой собственный код (от 0xA0 до 0xA5), поэтому я пытался их захватить. Но да, несмотря ни на что, они всегда возвращают 0x10 (сдвиг), 0x11 (ctrl), 0x12 (alt). Спасибо за ваш ответ :) –