function GetRealChar(AKey: Word): Char; var Layout: HKL; KeyboardState: TKeyboardState; RealCode: AnsiString; ScanCode: Integer; s: string; begin Layout := GetKeyboardLayout(GetCurrentThreadID); SetLength(RealCode, 1); FillChar(RealCode[1], Length(RealCode), 0); FillChar(KeyboardState[0], SizeOf(KeyboardState), 0); KeyboardState[AKey] := 0; ScanCode := (AKey shr 16) and $FF; ToAsciiEx(AKey, ScanCode, KeyboardState, PChar(RealCode), 0, Layout); s := RealCode; Result := s[1]; end;