Einzelnen Beitrag anzeigen

DevilsCamp
(Gast)

n/a Beiträge
 
#1

Ausrufezeichen per SendInput

  Alt 5. Jul 2007, 08:59
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?
  Mit Zitat antworten Zitat