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;
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."