17. MĂ€rz 201114 j Hallo Community, ich entwickle im Moment eine Software mit der ich Ă€hnlich wie mit Testtools wie WinRunner eine andere Software fernsteuern kann. Ich wĂŒrde das gerne mit Hilfe der Funktion FindWindow() machen. Ich habe per Spy++ die entsprechenden EintrĂ€ge gefunden und erziehle grundsĂ€tzlich auch schon die gewĂŒnschte FunktionalitĂ€t, aber: Unmittelbar nach dem Start der zu steuernden Anwendung können die entsprechenden Handles nicht gefunden werden. Ein Element liegt auf einer Toolbar. Das Handle auf die Toolbar ist immer da. Die "Childhandles" der Toolbar sind zunĂ€chst aber nicht sichtbar. (egal wie oft ich in Spy F5 drĂŒcke). Inzwischen habe ich einen seltsammen reproduzierbaren Effekt entdeckt und ein Vorgehen entwickelt, um sie sichtbar zu machen: Ich klicke einmal in das entsprechende Feld in der zu steuernden Anwendung, drĂŒcke in Spy++ F5 (refresh) und bringe die Anwendung dann wieder in den Vordergrund. Ich erhalte dann augenblicklich den Wert des entsprechenden Handles per findWindow() und sehe es auch, wenn ich in Spy++ nochmal F5 drĂŒcke. Vor der AusfĂŒhrung des beschriebenen Ablaufs erhalte ich als Handle 0. Kann mir jemand diesen Effekt erklĂ€ren bzw. sagen was Spy++ anstellt um das Handle sichtbar zu machen und wie ich das in meiner Anwendung nachstellen kann? Vielen Dank
17. MĂ€rz 201114 j Hast du mal ausprobiert, ob es auch ausreicht, statt auf Spy++ auf irgendeine andere Anwendung umzuschalten? Ich glaube nicht, dass Spy++ beim Refresh da etwas besonderes tut.
17. MÀrz 201114 j Ich hab jetzt glaub ich alle möglichen AblÀufe durch. Es geht wirklich NUR, wenn ich einmal einen Refresh in Spy++ mache.
17. MĂ€rz 201114 j Moin erstmal, also ich hab das bisher so verstanden: Du holst dir das handle als long durch spy++ und benutzt die findwindow() um das Fenster zu holen. Eigentlich hĂ€tte ich dir jetzt auch Klotzkopps Vorschlag vorlegen wollen. Aber das scheint ja nicht zu funktionieren oO. Hast du schon versucht, dir erst mit findwindowA() ĂŒber die caption das handle zu holen und darauf hin das Fenster mit wiederum diesem handle? Dann kannst du dir ja davon die child handles holen. Vllt spuckt dir Spy++ irgendwie nicht das Richtige aus... wie auch immer. WĂŒrde dann aber nicht erklĂ€ren, warum dein Programm nach refresh von Spy++ funktioniert. Das klingt vielleicht ĂŒberflĂŒssig, aber das Problem erscheint mir so merkwĂŒrdig, dass merkwĂŒrdige Lösungen den Erfolg bringen könnten Und umso lĂ€nger ich das schreibe, umso absurder erscheint mir mein Vorschlag, aber wer weiĂ. Das Problem hat mich ziemlich neugierig gemacht. Solltest du irgendwann die Lösung finden, schreib sie doch bitte hier rein. MfG, Marco
18. MÀrz 201114 j Sorry, war wohl etwas missverstÀndlich. Ich verwende Spy++ nur um die Name rauszukriegen. Die Handles hole ich mir genauso wie du das vorschlÀgst, mit findWindow und dann mit findWindowEx. Das von mir benötigte Handle ist in Ebene 4 das Baumes. Die Handles ab Ebene 3 kann ich allerdings nur finden, wenn ich vorher ein Refresh bei Spy gemacht habe. Das ist ja das Komische!!!
18. MĂ€rz 201114 j Die Handles ab Ebene 3 kann ich allerdings nur finden, wenn ich vorher ein Refresh bei Spy gemacht habe.Sind die Fenster zu diesen Handles denn vorher schon sichtbar? Vielleicht werden sie ja erst erzeugt, wenn man bestimmte Nachrichten an die Elternfenster schickt.
18. MĂ€rz 201114 j Sichtbar im Sinne von "ich kann sie auf der GUI sehen" ja. Was zum Kuckuck macht Spy++ da was ich nicht mache. Eben diese Nachrichten wĂŒrde ich suchen!!!!
18. MÀrz 201114 j Was zum Kuckuck macht Spy++ da was ich nicht mache.Du solltest dir mit Spy++ selbst ansehen können, welche Nachrichten bei dem Elternfenster eingehen, wenn du in Spy++ ein Refresh machst. Eine davon wird wohl WM_GETTEXT sein.
18. MĂ€rz 201114 j Sichtbar im Sinne von "ich kann sie auf der GUI sehen" ja. Was zum Kuckuck macht Spy++ da was ich nicht mache. Eben diese Nachrichten wĂŒrde ich suchen!!!! Vielleicht spricht Spy++ irgendwie die Form so an, dass sie einen repaint, validate oder dergleichen feuert. DafĂŒr mĂŒsste man jetzt den Code von Spy++ vorliegen haben. Etwas mehr Arbeit wĂ€re es, sich selbst eine form zu schreiben welche die gleichen Ebenen an handles besitzt wie die form die dir gerade Probleme macht und einfach mal per eventhandling und debugger reinzugucken, was Spy++ da so macht. EDIT: Du solltest dir mit Spy++ selbst ansehen können, welche Nachrichten bei dem Elternfenster eingehen, wenn du in Spy++ ein Refresh machst. Eine davon wird wohl WM_GETTEXT sein. Das ist natĂŒrlich ein kĂŒrzerer Weg
18. MĂ€rz 201114 j DANKE DANKE DANKE!!!! Eine Woche hat mich das finden dieser Antwort gekostet: Ich schicke wie Klotzkopp gesagt hat ein WM_GETTEXT an das parent Handle und warte ein Bisschen. Dann sind die Children auf einmal sichtbar! Super Idee mit Spy zu schauen, was es selbst tut! ;-)
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.