![]() |
Tastaturdruck Emulieren
hoiho
wie emulier ich z.b ein enter? ich möchte das beim programmstart meines progs (onactivate) einfach einen Key(taste) senden, es hat dabei kein besonderes ziel (memo oder sonstwas) es geht einfach darum das es so aussehen soll als wäre es von der tastatur gekommen, wie kriege ich sowas hin? |
Re: Tastaturdruck Emulieren
Kuck dir mal keybd_event an...
|
Re: Tastaturdruck Emulieren
hm irgendwie komm ich damit nicht klar, damit kann man virtuelle keys senden?
|
Re: Tastaturdruck Emulieren
Jein, du musst sie mit ORD umwandeln...
|
Re: Tastaturdruck Emulieren
|
Re: Tastaturdruck Emulieren
@alexander: ich versteh das nicht so ganz :\
@christian: ich bin mal einem thread gefolgt und hab einfach mal
Delphi-Quellcode:
aus einem thread kopiert (ob das sinn macht weiss ich nicht)
procedure TForm1.Button1Click(Sender: TObject);
begin SendMessage(Edit1.Handle,WM_KEYUP,VK_DOWN,0); SendMessage(Edit1.Handle,WM_KEYUP,VK_UP,0); end; es geht darum das ich ein programm auf dem pc habe, das JEDEN tastaturdruck zählt...also für jedentastendruck +1...nun möchte ich halt keys senden (ohne tastatur) das einfach immer so +1 hinzugefügt wird |
Re: Tastaturdruck Emulieren
Probier mal so:
Delphi-Quellcode:
keybd_event(ORD(VK_RETURN), 0, 0, 0);
|
Re: Tastaturdruck Emulieren
Moin Silent,
lies mal den Thread aus dem der Source stammt noch ein bisschen weiter. Du hast genau den Code erwischt, der so nicht funktioniert ;-) (falls es der Thread ist, den ich meine, steht noch was dazu drin) |
Re: Tastaturdruck Emulieren
hoi alexander, jo das geht so halb, hatte das mal so versucht:
Delphi-Quellcode:
aber nach ca 3 sek gibts nen zugriffsfehler?
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; begin for i := 0 to 10000 do begin Application.ProcessMessages; keybd_event(ORD(VK_RETURN), 0, 0, 0); label1.Caption := IntToStr(StrToInt(label1.Caption)+1); end; end; |
Re: Tastaturdruck Emulieren
Hi Christian 8), ich habe es aus diesem thred:
![]() |
Re: Tastaturdruck Emulieren
schreib mal statt
Delphi-Quellcode:
das hier
label1.Caption := IntToStr(StrToInt(label1.Caption)+1);
Delphi-Quellcode:
label1.Caption := label1.Caption + IntToStr(i);
|
Re: Tastaturdruck Emulieren
Moin Silent,
genau den meinte ich, und da stand auch noch: Zitat:
Erst wird die Taste VK_DOWN losgelassen, dann die Taste VK_UP losgelassen. Nur gedrückt werden sie nicht. ;-) |
Re: Tastaturdruck Emulieren
dann wird eine 0 nach der anderen der label1.caption angefügt, der zugriffsfehler kommt trotzdem:
![]() es ist nur der code im button, also ist alles andere auszuschliessen |
Re: Tastaturdruck Emulieren
@Christian: oh, das hab ich nicht bemerkt, wie drücke ich sie denn, "press" ?
mal mit keydown testen |
Re: Tastaturdruck Emulieren
Delphi-Quellcode:
so geht es aber auch nicht O_o
procedure TForm1.Button1Click(Sender: TObject);
begin SendMessage(self.Handle,WM_KEYDOWN,VK_DOWN,0); SendMessage(self.Handle,WM_KEYUP,VK_UP,0); end; |
Re: Tastaturdruck Emulieren
Moin Silent,
kann ja auch nicht. Du drückst VK_DOWN und lässt VK_UP los. |
Re: Tastaturdruck Emulieren
hm, wie geht es dann? teste schon fast ne stunde :(
|
Re: Tastaturdruck Emulieren
Moin Silent,
ist doch ganz einfach: Um einen Tastendruck zu simulieren, muss eine Taste gedrückt und dann wieder losgelassen werden, wie ich weiter oben, und in dem schon besprochenen anderen Thread gesagt habe, also statt:
Code:
muss es
SendMessage(self.Handle,WM_KEYDOWN,[color=red]VK_DOWN[/color],0);
SendMessage(self.Handle,WM_KEYUP,[color=red]VK_UP[/color],0);
Code:
heissen.
SendMessage(self.Handle,WM_KEYDOWN,[color=red]VK_DOWN[/color],0);
SendMessage(self.Handle,WM_KEYUP,[color=red]VK_DOWN[/color],0); |
Re: Tastaturdruck Emulieren
Hallo Christian,
bei einem druck auf dem button passiert einfach nichts, das heisst das andere programm registriert das nicht als tastendruck, wenn ich normal tippe wird für jeden druck die variable des anderen programms um 1 erhöht, aber per button geht das einfach nicht, gibt es da noch eine alternative? Erstmal danke für die hilfe |
Re: Tastaturdruck Emulieren
Schick eine BN_CLICK an den Button.
|
Re: Tastaturdruck Emulieren
hoi luckie,
ne, vieleicht habe ich mich eben falsch ausgedrückt, es soll ein tastaturdruck simuliert werden,...sagen wir einfach mal das ein <A> in die "luft" geschrieben wird |
Re: Tastaturdruck Emulieren
Du kannst nichts in die "Luft" schreiben. Irgendwo muß es ja landen, sonst kannst du dir das gleich sparen. BTW was ist für dich Luft?
|
Re: Tastaturdruck Emulieren
sagen wir mal ich schreibe einfach ein "A"(als beispiel) in einem IE Fenster, dawürde ja nichts passieren, da ja kein schreibfeld etc da ist, aber das Programm das ich habe loggt den geschriebenen buchstaben (also als tastendruck). Ich möchte das mein programm, wenn ich button1 anklicke, ein "A" schreibt, ein Ziel gibt es eigentlich nicht, nur das andere Programm muss diesen registrieren
|
Re: Tastaturdruck Emulieren
Moin Silent,
wenn Du nicht das Handle hast, an das Du die Taste schicken willst, musst Du es mit keybd_event machen. Dabei stehst Du mit Deiner Umsetzung allerdings vor einem Problem: keybd_event wirkt sich auf das Fenster aus, das den Tastaturfokus hat, was automatisch Deines ist, wenn Du dabei einen Button anklickst. Nimm mal einen Button und einen Timer und mach mal das Notepad auf.
Delphi-Quellcode:
Als erstes startest Du Dein Programm mal mit Timer1.Enabled := false, wechselst auf das Notepad, und klickst dann den Button in Deinem Formular an. Im Notepad rührt sich nichts.
procedure TForm1.Button1Click(Sender: TObject);
begin keybd_event(VK_SHIFT,0,0,0); keybd_event(ord('A'),0,0,0); keybd_event(ord('A'),0,KEYEVENTF_KEYUP,0); keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0); end; procedure TForm1.Timer1Timer(Sender: TObject); begin Button1Click(nil); end; Jetzt noch einmal das gleiche mit aktiviertem Timer. Es werden im Sekundenabstand A in das Notepad geschrieben. Im ersten Fall hat der Button den Tastaturfokus, und erhält das A, darum klappt es nicht. |
Re: Tastaturdruck Emulieren
hoi Christian,
danke für den Code, der funzt einwandfrei :) Das Programm loggt den zwar nicht (muss wohl irgendwie ein schutz sein :(). Aber wenigstens weiss ich wie es überhaupt geht keys zu senden 8) |
Re: Tastaturdruck Emulieren
nochmal vielleicht zur Verdeutlichung, da mir der Christian in dme anderem Thread geholfen hatte
SendMessage(Handle,WM_KEYDOWN,VK_DOWN,0); Handle : Handle zur Komponente/Fenster in der Tastendruck simuliert werden soll WM_KEYDOWN: bedeutet simuliere einen keydown-Ereignis (bei WM_KEYUP wird halt ein keyup-Ereignis simuliert) VK_DOWN: <-- der Tastendruck der ausgelöst werden soll (VK_DOWN = Richtungstaste nach oben, hier kann man alle möglichen virtuellen Tasten angeben, also auch z.B. VK_RETURN, VK_ESCAPE...usw.) so dass sollte jetzt zum Verständnis für jeden reichen... ... hat ja auch für mich gereicht :lol: |
Re: Tastaturdruck Emulieren
Keybd_Event(VK_RETURN, 0, 0, 0); //key down
Keybd_Event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); //key up |
Re: Tastaturdruck Emulieren
hoi,
ich habe immernoch das problem...also der simulierte tastendruck funktioniert zwar, aber das prog das diese keys loggt, loggt diesen nicht mit bzw zählt ihn nicht..gibt es nich noch ne andere möglichkeit? also mit :
Delphi-Quellcode:
loggt das prog (nicht meins) diesen key nicht
Keybd_Event(VK_RETURN, 0, 0, 0); //key down
Keybd_Event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); //key up |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:23 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