Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Tastendruck an ein Programm schicken (https://www.delphipraxis.net/99488-tastendruck-ein-programm-schicken.html)

Auron3 12. Sep 2007 23:52


Tastendruck an ein Programm schicken
 
hey leutz,
habe ma ne frage, wie kann ich einen Tastendruck Simulation an ein Programm schicken?

Also, mein Programm soll z.b. nach dem Window mit dem namen "Notepad" suchen und da dann hinschicken das die Tasten "h", "a", "l","l","o" gedrückt wurden.


Sry bin ein Delphi noob und erst recht winapi noob >_<


Mfg Auron

Sunlight7 13. Sep 2007 00:01

Re: Tastendruck an ein Programm schicken
 
Moin und willkommen in der DP :dp:

Die Sunchfunktion hilft immer gern: Hier im Forum suchenTastendruck ;)

Auron3 13. Sep 2007 16:29

Re: Tastendruck an ein Programm schicken
 
lol sag mir ma bitte wo du da was findest was meine frage beantwortet xD

Aber trotzdem danke

s-off 13. Sep 2007 16:36

Re: Tastendruck an ein Programm schicken
 
Hast Du Dir die Titel der gefundenen Beiträge durchgelesen? Anscheinend nicht.

Sunlight7 13. Sep 2007 16:51

Re: Tastendruck an ein Programm schicken
 
Zitat:

Zitat von Auron3
lol sag mir ma bitte wo du da was findest was meine frage beantwortet xD

Aber trotzdem danke

Guckst Du: hier, hier und hier ... ;)

Wie Du Notepad findest: Hier im Forum suchenFindWindow

Auron3 13. Sep 2007 17:16

Re: Tastendruck an ein Programm schicken
 
danke für die antworten ^^ aber irgentwie bekomme ich das mit den Tastensenden nicht hin /=


ich will halt einen Emulierten Tasten Druck 'A' an ein Programm schicken, und nicht einfach nur ein A ans Notepad

s-off 13. Sep 2007 17:42

Re: Tastendruck an ein Programm schicken
 
Zitat:

Zitat von Auron3
ich will halt einen Emulierten Tasten Druck 'A' an ein Programm schicken, und nicht einfach nur ein A ans Notepad

Dann tu das doch einfach :!:

Die Logik, das Notepad-Fenster mit der FindWindow-Funktion zu ermitteln und dann Tastencodes dort hin zu senden, lässt sich auf jedes x-beliebige andere Fenster portieren.

Auron3 13. Sep 2007 17:47

Re: Tastendruck an ein Programm schicken
 
das problem ist ja, das ich nicht kapiere wie das gehen soll /=

Sunlight7 13. Sep 2007 17:49

Re: Tastendruck an ein Programm schicken
 
Zeig mal den Code, den Du verwendest

Luckie 13. Sep 2007 18:02

Re: Tastendruck an ein Programm schicken
 
Besser wäre wohl Hier im Forum suchenWM_SETTEXT zu benutzen.

Auron3 13. Sep 2007 19:14

Re: Tastendruck an ein Programm schicken
 
sry ich verstehe nur bahnhof x_X

also als erstes hohle ich mir das Handel mit

Delphi-Quellcode:
window := FindWindow(NIL,'Notepad');
das klappt auch, aber dann will ich eine nachricht dahin schicken das gerade 'STRG' und 'A' im notepad gedrückt wurde.

das weiß ich nicht wie es geht, und mit den ganzen suchergebnissen kann ich nichts anfangen...

nur das es irgendie mit

Delphi-Quellcode:
SendMessage(window,"ne nachricht, ka welche",NIL,NIL);
geht >_<

Sunlight7 13. Sep 2007 19:32

Re: Tastendruck an ein Programm schicken
 
Delphi-Quellcode:
SendMessage(Handle, WM_SETTEXT, 0, LongInt(PChar('Bla bla bla')));
Das bringt Dir aber noch nix, wenn Du das verwendest mußt Du erst nach dem Handle des Memos im Notepad suchen.

Und window := FindWindow(NIL,'Notepad'); gibt bei mir 0 zurück, Window:=FindWindow(nil, 'Unbenannt - Editor'); findet eher was.

Beispielsweise würde das gehen:
Delphi-Quellcode:
   var Window:THandle;
begin
   Window:=FindWindow(nil, 'Unbenannt - Editor');
   Window:=FindWindowEx(Window, 0, nil, nil);

   SendMessage(Window, WM_SETTEXT, 0, LongInt(PChar('Bla bla bla')));

s-off 13. Sep 2007 19:39

Re: Tastendruck an ein Programm schicken
 
Na siehst DU,

mit ein bissel Eigeninitiative wird einem auch weitergeholfen.

Hier ein kommentiertes Beispiel:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
   Handle: HWND; //Unser Fensterhandle
   i: Integer; //Unsere Laufvariable für die For-Schleife

const
   sTEXT: String = 'Eine Nachricht. Keine Ahnung, welche'; //Unser Beispieltext

begin
   Handle := FindWindow('Notepad', nil); //Wir suchen das Handle des Notepads

   if Handle <> 0 then //wenn wir es gefunden haben
      Handle := FindWindowEx(Handle, 0, 'Edit', nil); //dann suchen wir das Handle des Editcontrols innerhalb des Notepads - denn dahin soll der Text gehen

   if Handle <> 0 then //wenn wir es gefunden haben
   for i := 1 to Length(sTEXT) do begin //gehen wir in einer Schleife den zu sendenden Text Zeichen für Zeichen durch und schicken ihn ans Edit-Feld
      SendMessage(Handle, WM_CHAR, Word(sTEXT[i]), 0);
   end;
end;

Auron3 13. Sep 2007 19:50

Re: Tastendruck an ein Programm schicken
 
ihr seit ja alle richtig nett und so und lieb euch ja auch aber was ihr da schreibt bringt mir 0 >_<

das mit dem Notpad war nur nen Beispiel ...

will an ein Prgramm schicken das die tasten STRG und A gedrückt wurden (zuerst STRG dann A, dann wird A losgelassen , dann STRG) so will ich das machen ^^ und keinen text in nen Notepad schreiben

s-off 13. Sep 2007 20:21

Re: Tastendruck an ein Programm schicken
 
Die Beiträge von Sunlight7 und mir waren auch nur Beispiele.
Es gibt noch x andere Wege, die alle zum gleichen Ergebnis führen, und die auch alle mit anderen Fenstern funktionieren.

Ausgangspunkt ist halt immer der, dass Du das Handle des Fensters findest, an welches Du Deine Tasten senden möchtest.

Und das machst Du mit FindWindow bzw. FindWindowEx.

Luckie 13. Sep 2007 20:25

Re: Tastendruck an ein Programm schicken
 
Gibt es dafür einen Menüeintrag? Wenn ja, würde ich an den Menüeintrag eine Button-Click / WM_COMMAND Nachricht schicken: http://www.delphipraxis.net/internal...=147649#147649


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:14 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