Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Ausrufezeichen per SendInput (https://www.delphipraxis.net/95325-ausrufezeichen-per-sendinput.html)

DevilsCamp 5. Jul 2007 08:59


Ausrufezeichen per SendInput
 
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?

SirThornberry 5. Jul 2007 09:25

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: http://www.delphipraxis.net/internal...=562991#562991


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz