Autor Beitrag
Stübi
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 331

Win XP, Win 2000, Win ME
D5 Ent, D7 Prof, D2005 PE, C#
BeitragVerfasst: 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
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: Do 21.10.04 12:00 
Hi,

Probier's mal mit PostMessage(HHandlerbtn, BM_CLICK, 00);

Ein allgemeiner Vorschlag zu "Fremdprogramm Button drücken" findest du hier:

www.swissdelphicente.../showcode.php?id=727
Stübi Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 331

Win XP, Win 2000, Win ME
D5 Ent, D7 Prof, D2005 PE, C#
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754
Erhaltene Danke: 1



BeitragVerfasst: Do 21.10.04 13:16 
Wenn diese funktion

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
  WindowHandle := FindWindow(nil, PChar('TestFormular'));
  if WindowHandle <> 0 then
  begin
    hBtn := FindWindowEx(WindowHandle, 0nil'OK'); // oder '&OK' je nach Beschriftung
    if hBtn <> 0 then
    begin
       SendMessage(hBtn, BM_CLICK, 00);
    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 user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.

_________________
Stellen Sie sich bitte Zirkusmusik vor.
Stübi Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 331

Win XP, Win 2000, Win ME
D5 Ent, D7 Prof, D2005 PE, C#
BeitragVerfasst: 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

_________________
Neun von zehn Stimmen in meinen Kopf sagen, dass ich nicht verrückt sei. Die zehnte summt die Tetrismelodie.
toms
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: Do 21.10.04 14:14 
Sehr wahrscheinlich handelt es sich um einen TSpeedButton, welcher kein Handle besitzt.
Stübi Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 331

Win XP, Win 2000, Win ME
D5 Ent, D7 Prof, D2005 PE, C#
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 331

Win XP, Win 2000, Win ME
D5 Ent, D7 Prof, D2005 PE, C#
BeitragVerfasst: Fr 22.10.04 07:32 
Guten Morgen

Ich habe jetzt folgendes mal ausprobiert, was bis auf eine Kleinigkeit auch super funktioniert.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
  
  x := 366;  // Integer
  y := 298;  // Integer
  SendMessage(HandlerWind,WM_SYSCOMMAND,SC_RESTORE,0);
  SetForegroundWindow(HandlerWind);
  PostMessage(HandlerWind,WM_MOVE,0,0);  //Funktioniert nicht, Fenster wird nicht verschoben
  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 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 331

Win XP, Win 2000, Win ME
D5 Ent, D7 Prof, D2005 PE, C#
BeitragVerfasst: 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

_________________
Neun von zehn Stimmen in meinen Kopf sagen, dass ich nicht verrückt sei. Die zehnte summt die Tetrismelodie.
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 331

Win XP, Win 2000, Win ME
D5 Ent, D7 Prof, D2005 PE, C#
BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 740

Win 2k, Win XP Pro
D5 Prof, D6 Ent, D2k5 PE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 331

Win XP, Win 2000, Win ME
D5 Ent, D7 Prof, D2005 PE, C#
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: 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.