AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Tastendruck simulieren in anderem Programm

Tastendruck simulieren in anderem Programm

Ein Thema von CreekMary · begonnen am 4. Mai 2008 · letzter Beitrag vom 18. Jul 2008
Antwort Antwort
Seite 1 von 2  1 2   
CreekMary
(Gast)

n/a Beiträge
 
#1

Tastendruck simulieren in anderem Programm

  Alt 4. Mai 2008, 20:13
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
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: Tastendruck simulieren in anderem Programm

  Alt 4. Mai 2008, 20:42
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.
Thomas
  Mit Zitat antworten Zitat
CreekMary
(Gast)

n/a Beiträge
 
#3

Re: Tastendruck simulieren in anderem Programm

  Alt 5. Mai 2008, 21:57
könnte mir vllt jemand ein allgemeines Beispiel Source schreiben? wäre net
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#4

Re: Tastendruck simulieren in anderem Programm

  Alt 5. Mai 2008, 23:02
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 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 Bei Google suchenPostKeyEx32
Thomas
  Mit Zitat antworten Zitat
CreekMary
(Gast)

n/a Beiträge
 
#5

Re: Tastendruck simulieren in anderem Programm

  Alt 14. Mai 2008, 19:27
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
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Tastendruck simulieren in anderem Programm

  Alt 14. Mai 2008, 20:21
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..
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#7

Re: Tastendruck simulieren in anderem Programm

  Alt 14. Mai 2008, 21:03
Hallo,

Den FindWindow() Code kannst du von WinSpy automatisch erzeugen lassen.
Menü Tools | Code Generator...
Thomas
  Mit Zitat antworten Zitat
CreekMary
(Gast)

n/a Beiträge
 
#8

Re: Tastendruck simulieren in anderem Programm

  Alt 17. Mai 2008, 11:53
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
  Mit Zitat antworten Zitat
Benutzerbild von MSSSSM
MSSSSM

Registriert seit: 18. Apr 2008
223 Beiträge
 
Delphi 7 Professional
 
#9

Re: Tastendruck simulieren in anderem Programm

  Alt 17. Mai 2008, 11:58
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
Marius
  Mit Zitat antworten Zitat
CreekMary
(Gast)

n/a Beiträge
 
#10

Re: Tastendruck simulieren in anderem Programm

  Alt 17. Mai 2008, 12:42
ok danke Problem 3 gelöst. =)

1+2 bestehen immer noch, will das ganze ja nicht im Notepad laufen lassen sondern im Spiel^^


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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:37 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