![]() |
Ausrufezeichen per SendInput
Hallo,
ich benutze folgenden Code:
Delphi-Quellcode:
Dieser sendet einen angegebenen Text Zeichen für Zeichen an das gerade aktive Fenster.
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; 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? |
Re: Ausrufezeichen per SendInput
deine Funktion kann generell nur mit Zeichen umgehen die bei der Programmierung vorgesehen waren (Zahlen Buchstaben). Verwende VKKeyScan um den richtigen Shiftstate etc. zu erhalten.
Oder verwende die fertige Lösung aus der Codelib: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz