![]() |
das gedückthalten einer taste simulieren
Hallo,
ich glaube der titel sagt schon fast alles ;). Ich möchte das gedrückthalten einer taste an eine anwendung senden. Wie mach ich das? MfG - Ghost |
Re: das gedückthalten einer taste simulieren
Hi Ghost,
das ist ganz einfach: Es gibt eine Message um eine Taste zu drücken- und dazu gibt es auch die Passende Message um die Taste wieder los zu lassen...
Delphi-Quellcode:
Ansonsten gibt natürlich auch noch ganz viele andere Infos in dieser Richtung hier in der DP... Die Such freut sich :lol:
Keybd_Event(Ord('H'),0,0,0);
Keybd_Event(Ord('H'),0,KEYEVENTF_KEYUP,0); Keybd_Event(Ord('A'),0,0,0); Keybd_Event(Ord('A'),0,KEYEVENTF_KEYUP,0); Keybd_Event(Ord('L'),0,0,0); Keybd_Event(Ord('L'),0,KEYEVENTF_KEYUP,0); Keybd_Event(Ord('L'),0,0,0); Keybd_Event(Ord('L'),0,KEYEVENTF_KEYUP,0); Keybd_Event(Ord('O'),0,0,0); Keybd_Event(Ord('O'),0,KEYEVENTF_KEYUP,0); Keybd_Event(Ord(13),0,0,0); //13 steht für die Entertaste Keybd_Event(Ord(13),0,KEYEVENTF_KEYUP,0); Leuchtende Grüße Stefan alias Light |
Re: das gedückthalten einer taste simulieren
Hi,
danke für die schnelle antwort. Aber das mit dem keyup funktioniert nicht... anscheinend nur bie shift tasten. Was mach ich falsch?
Delphi-Quellcode:
MfG - Ghost
procedure TForm1.startApressClick(Sender: TObject);
begin Edit1.SetFocus; keybd_event(Ord('A'), 0, 0, 0); end; procedure TForm1.stopApressClick(Sender: TObject); begin Edit1.SetFocus; keybd_Event(Ord('A'),0,KEYEVENTF_KEYUP,0); end; |
Re: das gedückthalten einer taste simulieren
Ich nehme an, in dem Augenblick, in dem der Button StopAPress gedrückt wird verliert Edit1 den Fokus, sodass die Tastendrücke nicht mehr gesendet werden.
|
Re: das gedückthalten einer taste simulieren
Hi Ihr,
habs extra grad noch mal ausprobiert- bei mir funktioniert es! Leuchtende Grüße Stefan |
Re: das gedückthalten einer taste simulieren
hi,
d.h. er schreibt in deine edit lauter As bis du den 2. button drückst und er aufhört? MfG - Ghost P.S.Kannste vll dein project, indem das funst uploaden? |
Re: das gedückthalten einer taste simulieren
mhh wenn das Edit in deinem eigenen Programm ist dann machs doch einfach so:
Delphi-Quellcode:
das in den ersten Button und in dem Zweiten:
repeat
Edit1.Text := Edit1.Text + 'a'; Application.Processmessages; until BooleanVariable;
Delphi-Quellcode:
find ich einfacher...
BooleanVariable := true;
Gruß Neutral General |
Re: das gedückthalten einer taste simulieren
hi,
danke für dienen tipp, aber das edit dient nur zum testen, normalerweise will ich die keys an eine andere anwendung senden. MfG - Ghost |
Re: das gedückthalten einer taste simulieren
Hi Ihr,
Bin grad nicht am Entwicklungsrechner.. Sobald ich den wieder zu verfügung hab stell ichs rein! Leuchtende Grüße Stefan |
Re: das gedückthalten einer taste simulieren
oh, vielen dank =)
|
Re: das gedückthalten einer taste simulieren
öhm, wollte ma fragen ob noch jmd ne idee hat, weil das ganze hier anscheinend ins stoppen geraten ist.
MfG - ghost |
Re: das gedückthalten einer taste simulieren
AHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH H I L F E bitte bitte bitte helft mir
MfG - Ghost |
Re: das gedückthalten einer taste simulieren
Liste der Anhänge anzeigen (Anzahl: 1)
Hi @all,
wie versprochen kommt hier eine kleine DemoApplication wo unter anderem das mit dem Tastatur ereignissen gezeigt wird. Ich hab den Quelltext eigentlich aussagekräftig mit Komentaren versehen.. Compiliert und erstellt mit Turbo Delphi Explorer :zwinker: es liegt auch die Fertige Exe mit im Zip archive. Dieses ist Selbstentpackend damit aufjedenfall jeder an die daten ran kommt... Falls ihr Fragen dazu habt schreibt mir ne pm oder halt hier rein. Noch kurz zu bedinung des Programms: es arbeitet hauptsächlich mit einem SystemTrayIcon. Über das PopUpMenü dieses kann man eigentlich alles was es gibt (is ja nich viel) steuern. Also es ist wirklich nur ganz klein. Wenn man in Edit2 einen Text eingibt und dann im TrayiconPopup den Punkt Key-Go! auswählt wird der Darin enthaltene Text original getreu (also mit Klein/Großschreibung) als Keybord messages ins ausgegeben.. Sonderzeichen (auser ' ') gehen allerdings nicht! Bin über eure Meinung gespannt :-D Leuchtende Grüße Stefan |
Re: das gedückthalten einer taste simulieren
-.- das is aber irgendwie nich die antwort auf meine frage, weil man damit auch nicht das >>gedrückthalten<< einer taste simulieren kann
MfG - Ghost |
Re: das gedückthalten einer taste simulieren
Also, das ist im Prinzip ganz einfach.
Mit
Delphi-Quellcode:
wird z.B. die Taste 'A' solange gedrückt (gehalten) bis man
Keybd_Event(Ord('A'),0,0,0); // entspricht dem KeyDown
Delphi-Quellcode:
aufruft. Will man z.B. Shift und A drücken, ruft man nacheinander auf
Keybd_Event(Ord('A'),0,KEYEVENTF_KEYUP,0); // entspricht dem KeyUp
Delphi-Quellcode:
und "läßt diese dann irgendwann wieder los" durch
Keybd_Event(VK_SHIFT,0,0,0);
Keybd_Event(Ord('A'),0,0,0);
Delphi-Quellcode:
Keybd_Event(Ord('A'),0,KEYEVENTF_KEYUP,0);
Keybd_Event(VK_SHIFT,0,KEYEVENTF_KEYUP,0); Grüsse ...Doc |
Re: das gedückthalten einer taste simulieren
hi,
das is ja das problem dieser befehl hier:
Delphi-Quellcode:
beinahltet anscheinent das loslassen schon.
Keybd_Event(Ord('A'),0,0,0);
MfG - Ghost |
Re: das gedückthalten einer taste simulieren
Moin,
ich habe das gerade mal getestet... Durch den Befehl wird KeyDown und KeyPress ausgelöst (kein KeyUp, die Taste bleibt also gedrückt). Im Gegensatz zur echten Tastatur wird das KeyPress Ereignis, was z.B. für die Darstellung der Zeichen in visuellen Komponenten zuständig ist nur 1x ausgelöst. Es kommt jetzt darauf an, was Du machen möchtest. Prüft die Anwendung, die Du steuern möchtest den KeyDown oder den KeyPress Event? Möchtest Du den KeyPress mehrfach ausführen, geht das z.B. so:
Delphi-Quellcode:
Allerdings entspricht dies dann nicht dem "Gedrückthalten" sondern dem hundertmaligen Drücken und Loslassen der Taste.
for i:=1 to 100 do // = 100x KeyDown/Press/Up
begin Keybd_Event(Ord('A'),0,0,0); // entspricht dem KeyDown + 1x KeyPress Keybd_Event(Ord('A'),0,KEYEVENTF_KEYUP,0); // entspricht dem KeyUp sleep(10); // wenn eine kurze Pause gewünscht end; Grüsse ...Doc |
Re: das gedückthalten einer taste simulieren
Hallo,
nimm doch den Vorschlag von Neutral General ![]()
Delphi-Quellcode:
Keybd_Event für KeyUp ist IMHO nicht erforderlich.
var
Form1: TForm1; BooleanVariable : Boolean; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin BooleanVariable := False; Edit1.setfocus; repeat Keybd_Event(Ord('A'),0,0,0); sleep(50); Application.Processmessages; until BooleanVariable; end; procedure TForm1.Button2Click(Sender: TObject); begin BooleanVariable := True; end; |
Re: das gedückthalten einer taste simulieren
Stimmt, das Key Up kann weggelassen werden. Allerdings wird dann trotzdem jeweils KeyDown und KeyPress (anstatt nur KeyPress) aufgerufen. Zum Schluss dann das KeyUp nicht vergessen.
Und ein Sleep (oder sonstige Verzögerung) ist zwingend erforderlich! Gerade noch einmal probiert... Grüsse ...Doc |
Re: das gedückthalten einer taste simulieren
hallo,
danke für eure antworten, ich glaube so wie es lannes geschreiben hat, könnte es funktionieren. Nun habe ich aber folgendes problem, wohin wird das keyevent gesendet? nicht an die application mit dem fokus? MfG - Ghost |
Re: das gedückthalten einer taste simulieren
Bin mir nicht sicher, obs in diesem konkreten Fall was hilft, aber such mal nach Sendkeys oder sndkeys. Das is IIRC ne Unit, die das ganze Tastengedrücke etwas vereinfacht. Ich hab mich - noch - nicht damit beschäftigt, kann also relativ wenig zu sagen, aber du kannst ja mal gucken...
mfg Christian |
Re: das gedückthalten einer taste simulieren
hi,
ja diese unit kenn ich und hab se auch schon verwendet. Aber das gedrückhalten funktioniert mit der nicht. MfG - Ghost |
Re: das gedückthalten einer taste simulieren
Zitat:
Wenn Du also eine fremde Anwendung ansprechen möchtest, musst Du das ganze verzögert ausführen, wenn es z.B. bei einem ButtonClick passieren soll, sonst ist ja gerade Deine eigene Anwendung aktiv, bei der gerade der Button gedrückt wurde. Grüsse ...Doc |
Re: das gedückthalten einer taste simulieren
ok, ich werde damit ein wenig experimentieren.
danke MfG - Ghost |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 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