Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋼) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

findWindow(), verschwundene Handles

Empfohlene Antworten

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

Ich hab jetzt glaub ich alle möglichen AblÀufe durch. Es geht wirklich NUR, wenn ich einmal einen Refresh in Spy++ mache.

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 :D

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

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!!!

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!!!!

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 :D

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.