![]() |
Tastendruck simulieren in anderem Programm
Hallo,
bitte zerfleischt mich nicht. Ich sage gleich am Anfang, ich habe Windos Vista, und kann deshalb nicht auf die Delphie Hilfe zurückgreifen, was ich sehr doof finde -,- Naja, ich suche Hilfe bei folgenden Problemen und möchte wissen wie ich sie lösen kann: - ich möchte, dass eine Taste (Leertaste) über einen gewissen zeitraum in einem anderen Programm gehalten wird. - ich möchte, dass eine Taste in einem anderen Programm gedrückt wird (und natürlich wieder losgelassen) normaler einmaliger druck). - ich möchte, dasseine Tastenkombination (Strg-H) in einem andere Programm gedrückt wird. (- die Tastendrücke sollen nur in dem einen andern Programm erfolgen.) Ja, also bitte bitte deutlich erklären, bin ein ziemlicher Anfänger, beiße mich aber durch ;) Hab schon gesucht und einige Themen gefunden. Nur leider wiedersprechen sich die meisten und in den restlichen wird es so kanpp erklärt, dass ich es nicht verstehen. Ich möchte nciht einfach einen Code kopieren, sonden es ansatzweise verstehen! Also wenn jemand ein Tutorial schreiben könnte, oder mir es hier detaliert erklären könnte fände ich das Super !!! Danke schonmal fürs durchlesen =) MFG CreekMary |
Re: Tastendruck simulieren in anderem Programm
Hallo
Grundsätzlich hast du zwei Möglichkeiten zum Simulieren von Tasten. 1) Keybd_event / SendInput 2) SendMessage / PostMessage Bei (1) muss die Anwendung im Vordergrund sein. Bei (2) funktioniert das Senden auch dann, wenn die Anwendung minimiert ist. Du brauchst jedoch ein Fenster Handle. Dieses findest du mit der FindWindow API. Jedoch wird das Senden von Strg + ... nicht oder nicht zuverlässig funktionieren. |
Re: Tastendruck simulieren in anderem Programm
könnte mir vllt jemand ein allgemeines Beispiel Source schreiben? wäre net
|
Re: Tastendruck simulieren in anderem Programm
Zitat:
Delphi-Quellcode:
keybd_event( VK_SPACE, MapVirtualKey( VK_SPACE,0), 0, 0);
Sleep(1000); // Pause keybd_event( VK_SPACE, MapVirtualKey( VK_SPACE,0), KEYEVENTF_KEYUP, 0); Zitat:
Siehe :arrow: ![]() |
Re: Tastendruck simulieren in anderem Programm
Hab jetzt folgenden Code:
Delphi-Quellcode:
hab nun mit dem neuen WinSpy folgendes aus der Anwendung herausgelesen:
procedure TForm1.Button1Click(Sender: TObject);
var wnd: HWND; begin wnd := FindWindow('*', nil); if wnd <> 0 then begin wnd := FindWindowEx(wnd, 0, '*2', nil); PostMessage(wnd, WM_KEYDOWN, VK_NUMPAD6, 0); end; end; ![]() Welche Daten muss ich jetzt bei * und bei *2 einsetzen, dass die NumPadtaste 6 im Spiel gedrückt wird? Vielen Dank |
Re: Tastendruck simulieren in anderem Programm
bei dem ersten stern musst du das hauptfenster eintragen, also den fenster namen, bei dem 2 stern, musst du den fensternamen des untergeordneten fensters eingeben, zb ein edit, beide namen kannst du mit dem winspy ermitteln..
|
Re: Tastendruck simulieren in anderem Programm
Hallo,
Den FindWindow() Code kannst du von WinSpy automatisch erzeugen lassen. Menü Tools | Code Generator... |
Re: Tastendruck simulieren in anderem Programm
Hallo
Habe jetzt noch 2 Probleme:
Delphi-Quellcode:
1. Wie finde ich mit WinSpy das hier heraus: wndMain := FindWindowEx(wndMain, 0, 'Edit', nil);
begin
wndMain := FindWindow('Notepad','Neues Textdokument.txt - Editor'); if wndMain <> 0 then begin wndMain := FindWindowEx(wndMain, 0, 'Edit', nil); PostMessage(wndMain, WM_KEYDOWN, VK_NUMPAD6, 0); end; end; 2. WinSpy klappt bei mir hervorragen bei Word, Editor, Exel und so, aber bei einem PC Spiel zB nicht. Gibt es eine Möglichkeit das noch hinzubekommen, oder kann man die 2 benötigten Angaben noch anderswo herbekommen? 3. Wie mach ich das, dass ununterbrochen Numpad6 gesendet wird, bis ich dies mit einem ButtonClick stope? Was muss ich dazu bei der Zahl hinter VK_Numpad6 eingeben? Dank sconmal und MFG |
Re: Tastendruck simulieren in anderem Programm
zu 3.
Delphi-Quellcode:
bei onClick dieses Butoons musst du isRunning auf false setzen, vor der schleife eben isRunning auf true, und GANZ wichtig, voher deklarieren!while isRunning do begin Application.ProcessMessages; PostMessage(wndMain, WM_KEYDOWN, VK_NUMPAD6, 0); end; mfg |
Re: Tastendruck simulieren in anderem Programm
ok danke Problem 3 gelöst. =)
1+2 bestehen immer noch, will das ganze ja nicht im Notepad laufen lassen sondern im Spiel^^ Zitat:
|
Re: Tastendruck simulieren in anderem Programm
zu 1. wie meinst du das?? findest du das edit aus dem editor nicht mit deinem programm oder wie??
das könnte vllt daran liegen das er schon den editor nicht findet, weil du nen andern fensternamen hast zb anstatt "nues textdokument.txt" halt "neues textdokument2.txt" oder so, also alles noch mal kontrollieren in dem fall und eventuell auch ne abfrage mitbenachrichtigung (messagebox) einbauen:
Delphi-Quellcode:
und zu 2. wei genau meinst du er findet die spiele nicht??? vollbild??
begin
wndMain := FindWindow('Notepad','Neues Textdokument.txt - Editor'); if wndMain <> 0 then begin wndMain := FindWindowEx(wndMain, 0, 'Edit', nil); PostMessage(wndMain, WM_KEYDOWN, VK_NUMPAD6, 0); end else showmessage('konnte das editorfenster nicht finden'); //hier ne messagebox oder irgendwas end; oder wie?? |
Re: Tastendruck simulieren in anderem Programm
nein, nein, nein ;)
zum Testen der Befehle, habe ich das Programm NotePad genommen, und es funktioniert auch alles wunderbar. Doch eingetlich sollen die Befehle ja in einem ganz anderen Programm ausgeführt werden. Deshalb weis ich nicht was ich dort wndMain := FindWindow('*','*'); und dort wndMain := FindWindowEx(wndMain, 0, '*', nil); eintragen soll. Lasse ich WinSpy über das Programm laufen, von dem ich die Infos brauche, macht er irgendwie erst garnix und dann hängt er sich auf oO |
Re: Tastendruck simulieren in anderem Programm
Zitat:
![]() |
Re: Tastendruck simulieren in anderem Programm
hab mitlerweile Delphi 2005 da klappt die hilfe, trotzdem danke.
Aber Problem 1-2 bestehen weiterhin, weiß denkeine rwie ich das Handel und die andern eigentschaften eines laufenden Programms rausfinden kann? |
Re: Tastendruck simulieren in anderem Programm
kann mir bitte mal jemannd antworten^^
Frage: Wie bekomme ich die koreckten daten von diesem Programm heraus? MFG |
Re: Tastendruck simulieren in anderem Programm
hey,
Wie du weisst hatte ich das selbe Problem, leider hab ich keine Lösung gefunden. =( ich wünsch dir noch viel Glück, ich habs inzwischen aufgeben aber mich Interesiert es immer noch was ich tun musss. Mfg Domi |
Re: Tastendruck simulieren in anderem Programm
*gähn* so langsam wirds nervig mit dem "Ich will ne Taste in nem Spiel drücken".
Was ich mich frage ist: Warum sagt man das nicht im ersten Post? Es wird groß und breit diskutiert und getan wie das bei einem nicht dx/opengl "Programm" funktioniert. Und egal welche sachen wir hier vorschlagen es wird nicht funktionieren. Um welches Spiel handelt es sich? Es gibt Möglichkeiten und Wege - aber die sind im Normalfall sehr komplex und nicht gerade für jemanden geeignet, der es nichtmal ohne fremde Hilfe schafft an ein "normales Programm" eine Nachricht zu schicken. Sorry für den etwas verschärften Ton aber alle 2 Wochen das Thema neu aufrollen zu wollen wird mittlerweile nervig. Die meisten Leute die soetwas fragen kommen aus der MMORPG Welt und wollen sich dabei einen Vorteil verschaffen. Mir persönlich is das total Hupe - aber wer glaubt dass die Spielehersteller solche Programme nicht erkennen der irrt. Vorallem wenn diese Programm von "ich möchte mal meinen ersten Cheat schreiben" Personen erstellt wurden. Teil uns bitte mal mit um welches Spiel es sich handelt. Vielleicht kann man ja wirklich noch helfen. Gruß Reli Edit: ah gerade gesehen... Metin2 ... kenn ich zum Glück nichtmal. Also ein MMO - ich gehe davon aus dass zu 99,98% in der EULA steht dass solche "Bots" nicht erlaubt sind. Ich weiß zwar wie man das im normalfall umgehen kann - sagen werd ich es aber mit sicherheit nicht. :roll: |
Re: Tastendruck simulieren in anderem Programm
hab oben im screenshot gesehen, das es ein sehr merkwürdiger klassennameist, bist du sicher das er die hauptform findet?? denn so wie es aussieht, wird der klassenname vllt per rechner modell generiert...
dazu weiß ich zu wenig von dem programm, welches du tastenanschläge senden willst, vllt solltest du einwenig mehr mit details rasu rücken, um hilfe zu bekommen.. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:29 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