Gute Arbeit
Als Dankeschön noch eine kleine Erweiterung.
zum Hintergrund:
Die aktuelle Implementation kann nur Zeichen schicken, die es auch im aktuell eingestellten Keyboard Layout gibt. D.h. auf einem deutschen Keyboard kannst du kein الله أكبر ausgeben.
Das ist uns aufgefallen, als ein TerminalDiensteClient mit englischem Tastaturlayout ein Ö schicken wollte. Mit der Erweiterung ist das kein Problem mehr.
Ein nicht unicodefähiges Control erhält dann die
Ansi Entsprechung des Zeichens.
wie man die Klasse erweitern kann:
Delphi-Quellcode:
class function TSendInputHelper.GetUnicode(SendChar: WideChar; Press,
Release: Boolean): TInputArray;
const
KEYEVENTF_UNICODE = 4;
var
ScanCode:Word absolute SendChar;
KeyDown, KeyUp:TInput;
begin
KeyDown.Itype:=INPUT_KEYBOARD;
KeyDown.ki.wVk:=0;
KeyDown.ki.wScan:=ScanCode;
KeyDown.ki.dwFlags:=KEYEVENTF_UNICODE;
KeyDown.ki.time:=0;
KeyDown.ki.dwExtraInfo:=GetMessageExtraInfo;
KeyUp:=KeyDown;
KeyUp.ki.dwFlags:=KeyUp.ki.dwFlags or KEYEVENTF_KEYUP;
SetLength(Result, 0);
if Press and Release then
begin
SetLength(Result, 2);
Result[0]:=KeyDown;
Result[1]:=KeyUp;
end
else
if Press then
begin
SetLength(Result, 1);
Result[0]:=KeyDown;
end
else
if Release then
begin
SetLength(Result, 1);
Result[0]:=KeyUp;
end;
end;
procedure TSendInputHelper.AddUnicodeChar(SendChar: WideChar; Press,
Release: Boolean);
var
Inputs:TInputArray;
begin
Inputs:=GetUnicode(SendChar, Press, Release);
if Assigned(Inputs) then
AddRange(Inputs);
end;
P.S. ich hab hier WideChar genommen, damit es auch vor D2009 funzt.