Autor |
Beitrag |
Stübi
      
Beiträge: 331
Win XP, Win 2000, Win ME
D5 Ent, D7 Prof, D2005 PE, C#
|
Verfasst: Do 21.10.04 11:22
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
_________________ Neun von zehn Stimmen in meinen Kopf sagen, dass ich nicht verrückt sei. Die zehnte summt die Tetrismelodie.
|
|
toms
      
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: Do 21.10.04 12:00
Hi,
Probier's mal mit PostMessage(HHandlerbtn, BM_CLICK, 0, 0);
Ein allgemeiner Vorschlag zu "Fremdprogramm Button drücken" findest du hier:
www.swissdelphicente.../showcode.php?id=727
|
|
Stübi 
      
Beiträge: 331
Win XP, Win 2000, Win ME
D5 Ent, D7 Prof, D2005 PE, C#
|
Verfasst: 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
_________________ Neun von zehn Stimmen in meinen Kopf sagen, dass ich nicht verrückt sei. Die zehnte summt die Tetrismelodie.
|
|
opfer.der.genauigkeit
      
Beiträge: 754
Erhaltene Danke: 1
|
Verfasst: 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.
Moderiert von Christian S.: Code- durch Delphi-Tags ersetzt.
_________________ Stellen Sie sich bitte Zirkusmusik vor.
|
|
Stübi 
      
Beiträge: 331
Win XP, Win 2000, Win ME
D5 Ent, D7 Prof, D2005 PE, C#
|
Verfasst: 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!
Wie geht sowas?
Danke für jegliche Antworten
Stübi
_________________ Neun von zehn Stimmen in meinen Kopf sagen, dass ich nicht verrückt sei. Die zehnte summt die Tetrismelodie.
|
|
toms
      
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: Do 21.10.04 14:14
Sehr wahrscheinlich handelt es sich um einen TSpeedButton, welcher kein Handle besitzt.
|
|
Stübi 
      
Beiträge: 331
Win XP, Win 2000, Win ME
D5 Ent, D7 Prof, D2005 PE, C#
|
Verfasst: Do 21.10.04 14:23
Das heisst ich kann den nicht ansprechen, oder eben ferngesteuert drücken?
_________________ Neun von zehn Stimmen in meinen Kopf sagen, dass ich nicht verrückt sei. Die zehnte summt die Tetrismelodie.
|
|
Stübi 
      
Beiträge: 331
Win XP, Win 2000, Win ME
D5 Ent, D7 Prof, D2005 PE, C#
|
Verfasst: 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
_________________ Neun von zehn Stimmen in meinen Kopf sagen, dass ich nicht verrückt sei. Die zehnte summt die Tetrismelodie.
|
|
Stübi 
      
Beiträge: 331
Win XP, Win 2000, Win ME
D5 Ent, D7 Prof, D2005 PE, C#
|
Verfasst: Fr 22.10.04 07:48
 Erfolge am Morgen in der Frühe
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
_________________ Neun von zehn Stimmen in meinen Kopf sagen, dass ich nicht verrückt sei. Die zehnte summt die Tetrismelodie.
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: 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 
      
Beiträge: 331
Win XP, Win 2000, Win ME
D5 Ent, D7 Prof, D2005 PE, C#
|
Verfasst: 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
_________________ Neun von zehn Stimmen in meinen Kopf sagen, dass ich nicht verrückt sei. Die zehnte summt die Tetrismelodie.
|
|
GSE
      
Beiträge: 740
Win 2k, Win XP Pro
D5 Prof, D6 Ent, D2k5 PE
|
Verfasst: 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
_________________ Programming today is a race between software engineers striving to build bigger and better idiot-proof programs
and the universe trying to produce bigger and better idiots. So far, the universe is winning. (Richard Cook)
|
|
Stübi 
      
Beiträge: 331
Win XP, Win 2000, Win ME
D5 Ent, D7 Prof, D2005 PE, C#
|
Verfasst: 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
_________________ Neun von zehn Stimmen in meinen Kopf sagen, dass ich nicht verrückt sei. Die zehnte summt die Tetrismelodie.
|
|
toms
      
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: 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.
|
|
|