Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   ToUnicodeEx - "fremdes" Tastaturlayout (https://www.delphipraxis.net/187025-tounicodeex-fremdes-tastaturlayout.html)

Neutral General 21. Okt 2015 13:23

ToUnicodeEx - "fremdes" Tastaturlayout
 
Hallo,

Der Titel ist schwer zu beschreiben und ist daher nicht zu 100% aussagekräftig :/
Es geht darum dass ich Scancode + VKey mit ToUnicodeEx in ein Zeichen umwandle.
Über den letzten Parameter gebe ich den "input locale identifier" (Tastaturlayout) des gewünschten Landes an.

Das funktioniert soweit auch recht gut. Allerdings funktioniert es z.T. nicht wenn ich den übergebenen ILI nicht zu den Eingabesprache in Windows hinzugefügt habe.
Füge ich die Sprache hinzu (Bulgarisch z.B.) dann funktioniert es. Danach kann ich die Eingabesprache auch direkt wieder rausschmeißen und es funktioniert immernoch - bis es dann irgendwann nicht mehr funktioniert. Alles etwas seltsam.

Ich hoffe das klingt nicht zu verwirrend.
Hier ist etwas Beispielcode:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  ScanCodeTasteA = 30;
  ILI_Bulgarien = $F0AA0402; // Herausgefunden per GetKeyboardLayout bei aktivem Bulg. Tastaturlayout
var
  vkey: Cardinal;
  kbState: Array[0..255] of Byte;
  buff: WideChar;
begin
  FillChar(kbState[0], SizeOf(kbState), 0);

  vkey := MapVirtualKeyEx(ScanCodeTasteA, MAPVK_VSC_TO_VK, ILI_Bulgarien);
  ToUnicodeEx(vkey, ScanCodeTasteA, @kbState[0], @buff, 1, 0, ILI_Bulgarien);
  Caption := Buff;
end;

Neutral General 21. Okt 2015 13:37

AW: ToUnicodeEx - "fremdes" Tastaturlayout
 
Okay hat sich erledigt.
Man kann/sollte nicht den ILI direkt angeben sondern diesen über LoadKeyboardLayout laden/abfragen.
Dann funktioniert es zuverlässig, selbst wenn die Sprache in Windows nicht als Eingabesprache definiert ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz