so..nach etwas tüftelei hab ich nun die Routine fertig. Sie ermittelt zu einem Virtuellen Tastencode das entsprechende Zeichen. Auch die Shift-Taste wird hierbei berücksichtigt.
Delphi-Quellcode:
function VKToChar(Key:smallint;Shift:boolean=false;layout:HKL=0):string;
var
kb : TKeyboardState;
VK : UINT;
scan : UINT;
hs : array [0..255] of char;
erg : Integer;
begin
result := '';
fillchar(hs,sizeof(hs),0);
//Wenn kein Keyboardlayout angegeben dann das des aktuellen Threads nehmen
if (layout = 0) then
layout := GetKeyboardlayout(0);
//virtuellen Tastencode der Taste ermitteln
VK := VKKeyScan(chr(key));
//Scan-Code ermitteln
scan := MapVirtualKey(VK,0);
//Keyboard-State ermitteln und entsprechend setzten
GetKeyboardState(kb);
kb[key] := (kb[VK] or $80);
if shift then
kb[VK_SHIFT] := KB[VK_SHIFT] OR $80;
SetKeyboardState(kb);
//Zeichen ermitteln
erg := toAsciiEx(VK,scan,kb,@hs,0,layout);
if (erg > 0) then
result := StrPas(HS)
else
result := 'ERROR';
end;
Somit ist es möglich zu ermitteln welches zeichen entsteht wenn ich beispielsweise SHIFT+1 drücke ('!'). Leider funktioniert das nicht mit der ALT GR-Taste.