Delphi-PRAXiS
Seite 1 von 2  1 2      

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



Alle Zeitangaben in WEZ +1. Es ist jetzt 02:46 Uhr.
Seite 1 von 2  1 2      

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