Entwickler-Ecke
Windows API - Fremdprogramm Button drücken
Stübi - Do 21.10.04 11:22
Titel: Fremdprogramm Button drücken
Hallo Zusammen
Ich versuche über mein Programm, in einem anderen Programm einen Bitbutton (Name: Senden) zu drücken.
Den Hander des Fremdprogrammes habe ich herausgefunden und übergebe ihn der Procedure über die Variabel HandlerWind.
Wenn ich die untenstehende procedure ausführe bekomme ich beim Handler Handlerbtn keine Rückgabe (das Fremdprogramm existiert 100%ig) woran könnte das liegen?
Procedure
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TfrmTest.Remote(HandlerWind : HWND); var HandlerBTN : HWND; begin SendMessage(HandlerWind,WM_SYSCOMMAND,SC_RESTORE,0); SetForegroundWindow(HandlerWind); Handlerbtn := FindWindowEx(HandlerWind,0,nil,'Senden '); SendMessage(Handlerbtn,WM_LBUTTONDOWN,0,0); SendMessage(Handlerbtn,WM_LBUTTONUP,0,0); end; |
Danke für eure Antwort
Gruss Stübi
Stübi - Do 21.10.04 13:00
Danke erstmals für deine Antwort,
Das Problem besteht aber weiter: Ich bekomme den Handler des Buttons gar nicht raus. Ich suche mit der FindWindowEx nach der Caption dieses Button und dieser heisst sicher Senden ist kein Hotkey und hat auch kein Ambresand.
Gruss Stübi
opfer.der.genauigkeit - Do 21.10.04 13:16
Wenn diese funktion
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| WindowHandle := FindWindow(nil, PChar('TestFormular')); if WindowHandle <> 0 then begin hBtn := FindWindowEx(WindowHandle, 0, nil, 'OK'); if hBtn <> 0 then begin SendMessage(hBtn, BM_CLICK, 0, 0); end; end; |
kein ergebnis bringt, dann hol dir mal Spy- X, dann kriegste nämlich die richtige Beschriftung des Buttons raus. Is hier irgendwo im Forum zu finden.
Mußt danach suchen. :D
Moderiert von
Christian S.: Code- durch Delphi-Tags ersetzt.
Stübi - Do 21.10.04 13:52
Hallo
Ok habe mir X-Spy heruntergeladen und gestartet, gutes Programm muss ich sagen.
Wenn ich nun mit dem FindWindow Fadenkreuz auf mein Programm fahre, dass ich kontrollieren will, sehe ich sämtliche Fenstertittel und Captions Hanlder und so weiter. Doch wenn ich auf den Button fahre zeigt mir x-Spy den Handler, Caption und Fenstertext der Hauptform an! :cry:
Wie geht sowas? :?:
Danke für jegliche Antworten
Stübi
toms - Do 21.10.04 14:14
Sehr wahrscheinlich handelt es sich um einen TSpeedButton, welcher kein Handle besitzt.
Stübi - Do 21.10.04 14:23
Das heisst ich kann den nicht ansprechen, oder eben ferngesteuert drücken?
Stübi - Fr 22.10.04 07:32
Guten Morgen
Ich habe jetzt folgendes mal ausprobiert, was bis auf eine Kleinigkeit auch super funktioniert.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| x := 366; y := 298; SendMessage(HandlerWind,WM_SYSCOMMAND,SC_RESTORE,0); SetForegroundWindow(HandlerWind); PostMessage(HandlerWind,WM_MOVE,0,0); Mouse.CursorPos:=Point(366,298); mouse_event(MOUSEEVENTF_leftDOWN,x,y,0,0); mouse_event(MOUSEEVENTF_leftUP,x,y,0,0); |
Ich will das Fenster mit dem Button den ich drücken will an die Position oben links verschieben (0,0) und dann mit der Maus auf den Button clicken. Wenn ich das Fenster zuvor selbst an diese Position verschiebe funktioniert es, wenn sich das Fenster aber wo anders befindet wird es nicht verschoben und folglich ein Mausclick ins leere ausgeführt.
Soweit mein Problem.
Gruss Stübi
Stübi - Fr 22.10.04 07:48
:D Erfolge am Morgen in der Frühe :D
Hab noch etwas weiter gecoded und habe mein problem lösen können.
Ordne nun das Fenster über MoveWindow neu an und clicke dann an die richtige stelle, allen danke für ihre Antwort.
Gruss Stübi
F34r0fTh3D4rk - So 24.10.04 17:53
ich hab auch mal sowas geschrieben, das hat knöpfe in meiner eigenen anwendung
geklickt, war ziemlich sinnlos, aber egal.
Gibt es eine Möglichkeit, knöpfe(also Links) auf internetseiten zu klicken
zb bei google: suchen (oder so) ???
Stübi - So 24.10.04 18:22
Prinzipiell sicher, wenn sich die Links immer am genau gleichen Ort befinden kannst du einen Mausclick simulieren (an der entsprechenden Stelle) und zwar mit:
Delphi-Quelltext
1: 2:
| mouse_event(MOUSEEVENTF_leftDOWN,x,y,0,0); mouse_event(MOUSEEVENTF_leftUP,x,y,0,0); |
x ist ein Integerwert der die Position auf der x-Achse angibt und y logischerweise dasselbe auf der y-Achse (in Pixel (soviel ich weiss))
Oder wenn die Tabreihenfolge immer gleich ist simulierst du die Anzahl Tabs und anschliessend ein Returnerreignis.
Gruss Stübi
GSE - So 24.10.04 18:57
Zitat: |
Ordne nun das Fenster über MoveWindow neu an und clicke dann an die richtige stelle, allen danke für ihre Antwort. |
wieso verschiebst du's erst, hol dir doch mit WindowRect die Koordinaten.
mfg
GSE
Stübi - So 24.10.04 19:02
Danke für den Tipp, wusste nicht dass es so einen Befehl gibt, ist natürlich einfacher.
Gruss Stübi
toms - So 24.10.04 19:42
Zitat: |
Gibt es eine Möglichkeit, knöpfe(also Links) auf internetseiten zu klicken |
Ja, Beispiele findest du genügend im WEB.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!