![]() |
Delphi-Version: 10 Seattle
Sendkeys, "Enter" einbauen
Hey Leute,
Ich habe im Internet diesen Code gefunden der auch einwandfrei funktioniert:
Code:
Jetzt möchte ich aber auch die Möglichkeit haben "Enter" zu simulieren.. hat jemand eine Idee, wie ich den Code modifizieren könnte? Oder hat jemand einen Code, mit dem beides funktoniert
uses
Windows; {$POINTERMATH ON} procedure SendKeys(const S: String); var InputEvents: PInput; I, J: Integer; begin if S = '' then Exit; GetMem(InputEvents, SizeOf(TInput) * (Length(S) * 2)); try J := 0; for I := 1 to Length(S) do begin InputEvents[J].Itype := INPUT_KEYBOARD; InputEvents[J].ki.wVk := 0; InputEvents[J].ki.wScan := Ord(S[I]); InputEvents[J].ki.dwFlags := KEYEVENTF_UNICODE; InputEvents[J].ki.time := 0; InputEvents[J].ki.dwExtraInfo := 0; Inc(J); InputEvents[J].Itype := INPUT_KEYBOARD; InputEvents[J].ki.wVk := 0; InputEvents[J].ki.wScan := Ord(S[I]); InputEvents[J].ki.dwFlags := KEYEVENTF_UNICODE or KEYEVENTF_KEYUP; InputEvents[J].ki.time := 0; InputEvents[J].ki.dwExtraInfo := 0; Inc(J); end; SendInput(J, InputEvents[0], SizeOf(TInput)); finally FreeMem(InputEvents); end; end; und mit dem ich diesen hier ersetzen könnte? Viele Dank schon mal im voraus :) |
AW: Sendkeys, "Enter" einbauen
Delphi-Quellcode:
Keybd_Event(VK_RETURN,0,0,0); //Taste drücken
Keybd_Event(VK_RETURN,0,KEYEVENTF_KEYUP,0); //Taste loslassen |
AW: Sendkeys, "Enter" einbauen
Ich wäre ja erstmal auf die doofe Idee gekommen und hätte mir die Dokumentation zu
![]() also ![]() ![]() ![]() ![]() |
AW: Sendkeys, "Enter" einbauen
Vielen Dank!! noch eine Frage: wenn ich in meiner sendkeys funktion etwas auf meiner Tform einbinden will (z.b. ein label1) erkennt mein Programm das nicht, wahrscheinlich weil ich in der funktion nur "(const S: String)" übergebe..
siehe Code... wie baue ich noch den "Sender: TObejct" ein? so: (Sender: TObject, const S: String); funktioniert nicht :/ |
AW: Sendkeys, "Enter" einbauen
Hmm..
einfach mit SendKeys(#13); versucht? |
AW: Sendkeys, "Enter" einbauen
Vielleicht hilfst..
gruss |
AW: Sendkeys, "Enter" einbauen
Code:
Habe es hiermit probier, allerdings macht er immernoch kein Enter:/
{$POINTERMATH ON}
procedure TForm1.SendKeys(const S: String); var InputEvents: PInput; I, J: Integer; begin if S = '' then begin if Checkbox1.checked=True then begin Keybd_Event(VK_RETURN,0,0,0); //Taste drücken Keybd_Event(VK_RETURN,0,KEYEVENTF_KEYUP,0); //Taste loslassen end; Exit; end; GetMem(InputEvents, SizeOf(TInput) * (Length(S) * 2)); try J := 0; for I := 1 to Length(S) do begin InputEvents[J].Itype := INPUT_KEYBOARD; InputEvents[J].ki.wVk := 0; InputEvents[J].ki.wScan := Ord(S[I]); InputEvents[J].ki.dwFlags := KEYEVENTF_UNICODE; InputEvents[J].ki.time := 0; InputEvents[J].ki.dwExtraInfo := 0; Inc(J); InputEvents[J].Itype := INPUT_KEYBOARD; InputEvents[J].ki.wVk := 0; InputEvents[J].ki.wScan := Ord(S[I]); InputEvents[J].ki.dwFlags := KEYEVENTF_UNICODE or KEYEVENTF_KEYUP; InputEvents[J].ki.time := 0; InputEvents[J].ki.dwExtraInfo := 0; Inc(J); end; SendInput(J, InputEvents[0], SizeOf(TInput)); finally FreeMem(InputEvents); end; end; |
AW: Sendkeys, "Enter" einbauen
Moin...8-)
Zitat:
Vieleicht gibt es auch was einfaches um mit ENTER zum nächsten Feld zu gelangen. :zwinker: (nur eine Vermutung) |
AW: Sendkeys, "Enter" einbauen
hab meinen Fehler gefunden:) Diese Entertaste die ich oben implementiert habe zu simulieren, wird nie ausgeführt, da der Code durchlaufen wird, dann eben die Schleife und das wars.. Habe den Code also einfach falsch implementiert :oops:
|
AW: Sendkeys, "Enter" einbauen
Zitat:
|
AW: Sendkeys, "Enter" einbauen
@TE: Aus Deinem Code geht nicht hervor, was die RETURN-Simulation machen soll.
Die 2 Zeilen Code brauchen natürlich ein Objekt, das auf die RETURN-Simulation reagiert - siehe Beispiel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin caption:= 'B1'; end; procedure TForm1.Button2Click(Sender: TObject); begin Button1.SetFocus; Keybd_Event(VK_RETURN,0,0,0); //Taste drücken Keybd_Event(VK_RETURN,0,KEYEVENTF_KEYUP,0); //Taste loslassen end; |
AW: Sendkeys, "Enter" einbauen
ehrlich gesagt weiß ich das selber nicht genau:)
Ich wollte einfach erstmal einen Text schreiben indem ich Tastendrücke simuliere und wollte auch ein "Return" simulieren können:) Also so wirklich die Idee dahinter hatte ich nicht :| t.roller dein Code hat geklappt wie gesagt, ich habe ihn nur falsch angewendet.. er wurde nie ausgeführt, dort, wo ich ihn als erstes implementiert hatte:). Funktioniert jetzt alles:) Danke an alle:))) |
AW: Sendkeys, "Enter" einbauen
Zitat:
|
AW: Sendkeys, "Enter" einbauen
haentschman wie gesagt, ich wollte einfach mal einen Text schreiben über simulierte Tasten, mehr nicht :-D
Ich gebe einen String vor und die Anzahl der Wiederholungen. die Checkbox macht eben das return, oder eben kein return zischen den Wiederholungen.. beispiel: string: ABC, WDH: 5, checkbox:=True -> ABC ABC ABC ABC ABC
Code:
procedure TForm1.SendKeys(const S: String);
var InputEvents: PInput; I, J: Integer; begin if S = '' then Exit; GetMem(InputEvents, SizeOf(TInput) * (Length(S) * 2)); try J := 0; for I := 1 to Length(S) do begin InputEvents[J].Itype := INPUT_KEYBOARD; InputEvents[J].ki.wVk := 0; InputEvents[J].ki.wScan := Ord(S[I]); InputEvents[J].ki.dwFlags := KEYEVENTF_UNICODE; InputEvents[J].ki.time := 0; InputEvents[J].ki.dwExtraInfo := 0; Inc(J); InputEvents[J].Itype := INPUT_KEYBOARD; InputEvents[J].ki.wVk := 0; InputEvents[J].ki.wScan := Ord(S[I]); InputEvents[J].ki.dwFlags := KEYEVENTF_UNICODE or KEYEVENTF_KEYUP; InputEvents[J].ki.time := 0; InputEvents[J].ki.dwExtraInfo := 0; Inc(J); end; SendInput(J, InputEvents[0], SizeOf(TInput)); if Checkbox1.checked=True then begin Keybd_Event(VK_RETURN, 1, KEYEVENTF_EXTENDEDKEY, 0) ; Keybd_Event(VK_RETURN, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0); end; finally FreeMem(InputEvents); end; end; |
AW: Sendkeys, "Enter" einbauen
Hallo...:P
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23: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-2025 by Thomas Breitkreuz