Hallo,
ich benutze folgenden Code:
Delphi-Quellcode:
procedure SimInput(Text: string; Delay: Word = 80);
var
i : Integer;
ind : Integer;
Inp : array of TInput;
s : string;
begin
for i := 1 to Length(Text) do
begin
SetLength(Inp, 2);
s := Text[i];
ind := 0;
if (s = AnsiUpperCase(s)) and (not (s[1] in ['0'..'9', #0..#32])) then
begin
SetLength(Inp, 4);
Inp[0].Itype := INPUT_KEYBOARD;
Inp[0].ki.wVk := VK_SHIFT;
Inp[0].ki.dwFlags := 0;
Inp[3].Itype := INPUT_KEYBOARD;
Inp[3].ki.wVk := VK_SHIFT;
Inp[3].ki.dwFlags := KEYEVENTF_KEYUP;
ind := 1;
end; // if (s = AnsiUpperCase(s))
Inp[ind].Itype := INPUT_KEYBOARD;
Inp[ind].ki.wVk := Ord(UpCase(s[1]));
Inp[ind].ki.dwFlags := 0;
ind := ind + 1;
Inp[ind].Itype := INPUT_KEYBOARD;
Inp[ind].ki.wVk := Ord(UpCase(s[1]));
Inp[ind].ki.dwFlags := KEYEVENTF_KEYUP;
SendInput(Length(Inp), Inp[0], SizeOf(TInput));
Sleep(Delay);
end; // for i := 1 to Length(Text)
end;
Dieser sendet einen angegebenen Text Zeichen für Zeichen an das gerade aktive Fenster.
Doch leider habe ich Probleme, wenn der Text ein Ausrufezeichen enthält.
Um genau zu sein:
Es wird nicht gesendet.
Bei einer Überprüfung mit OnKeyDown erhalte ich die Bestätigung, dass der Code der Taste, die gedrückt wurde, dem der 1 entspricht, zusammen mit einem bereits gedrücktem Shift.
Dem obigen Quellcode wird bei einem ! aber genau das auch simuliert: SHIFT drücken, 1 drücken, 1 loslassen, SHIFT loslassen.
Habe ich evtl. etwas übersehen?