Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Tastendruck simulieren in anderem Programm (https://www.delphipraxis.net/113215-tastendruck-simulieren-anderem-programm.html)

CreekMary 4. Mai 2008 19:13


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

toms 4. Mai 2008 19:42

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.

CreekMary 5. Mai 2008 20:57

Re: Tastendruck simulieren in anderem Programm
 
könnte mir vllt jemand ein allgemeines Beispiel Source schreiben? wäre net

toms 5. Mai 2008 22:02

Re: Tastendruck simulieren in anderem Programm
 
Zitat:

Zitat von CreekMary
- ich möchte, dass eine Taste (Leertaste) über einen gewissen zeitraum in einem anderen Programm gehalten wird.

z.B:

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:

Zitat von CreekMary
- 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.)


Siehe :arrow: Bei Google suchenPostKeyEx32

CreekMary 14. Mai 2008 18:27

Re: Tastendruck simulieren in anderem Programm
 
Hab jetzt folgenden Code:
Delphi-Quellcode:
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;
hab nun mit dem neuen WinSpy folgendes aus der Anwendung herausgelesen:
http://www.250kb.de/u/080514/j/f5626d6b.jpg


Welche Daten muss ich jetzt bei * und bei *2 einsetzen, dass die NumPadtaste 6 im Spiel gedrückt wird?

Vielen Dank

lbccaleb 14. Mai 2008 19:21

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..

toms 14. Mai 2008 20:03

Re: Tastendruck simulieren in anderem Programm
 
Hallo,

Den FindWindow() Code kannst du von WinSpy automatisch erzeugen lassen.
Menü Tools | Code Generator...

CreekMary 17. Mai 2008 10:53

Re: Tastendruck simulieren in anderem Programm
 
Hallo

Habe jetzt noch 2 Probleme:

Delphi-Quellcode:
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;
1. Wie finde ich mit WinSpy das hier heraus: wndMain := FindWindowEx(wndMain, 0, 'Edit', nil);

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

MSSSSM 17. Mai 2008 10:58

Re: Tastendruck simulieren in anderem Programm
 
zu 3.

Delphi-Quellcode:

while isRunning do
begin
  Application.ProcessMessages;
  PostMessage(wndMain, WM_KEYDOWN, VK_NUMPAD6, 0);
end;
bei onClick dieses Butoons musst du isRunning auf false setzen, vor der schleife eben isRunning auf true, und GANZ wichtig, voher deklarieren!

mfg

CreekMary 17. Mai 2008 11:42

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:

Zitat von CreekMary
Hallo

Delphi-Quellcode:
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;
1. Wie finde ich mit WinSpy das hier heraus: wndMain := FindWindowEx(wndMain, 0, 'Edit', nil);

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?

Dank sconmal und MFG


lbccaleb 17. Mai 2008 14:12

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:
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;
und zu 2. wei genau meinst du er findet die spiele nicht??? vollbild??
oder wie??

CreekMary 18. Mai 2008 09:43

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

Blackheart 18. Mai 2008 09:51

Re: Tastendruck simulieren in anderem Programm
 
Zitat:

Zitat von CreekMary
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 ...

Siehe dort

CreekMary 18. Mai 2008 10:11

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?

CreekMary 28. Mai 2008 14:06

Re: Tastendruck simulieren in anderem Programm
 
kann mir bitte mal jemannd antworten^^

Frage: Wie bekomme ich die koreckten daten von diesem Programm heraus?

MFG

KleinAmann 18. Jul 2008 12:15

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

Relicted 18. Jul 2008 12:24

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:

lbccaleb 18. Jul 2008 14:03

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 13:15 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