Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1312to1316
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Handle von Window finden, wenn WindowText leer

Handle von Window finden, wenn WindowText leer
13.05.2013 16:52:48
Window
Hallo,
stehe hier vor einem für mich unlösbaren Problem.
Wollte ein kleines Tool zur Steuerung eines externen Programms schreiben und zwar mit Hilfe von Windows-Api.
Normalerweise hangelt man sich ja durch die einzelnen Windows um über den WindowsText den richtigen Handle zu bekommen (siehe z.B. hier: http://www.vbaexpress.com/kb/getarticle.php?kb_id=52).
Ich habe mein externes Programm mit WinSpy analysiert und feststellen müssen, das etliche Windows keinen WindowsText besitzen (bzw. den Wert "" haben).
Was kann ich nun tun um zum richtigen Handle zu kommen?
Vielen Dank schon Mal für die Hilfe!!!

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Handle von Window finden, wenn WindowText leer
13.05.2013 21:54:18
Window
Hallo,
ist denn der Klassenname des Fensters eindeutig?
Gruß
Nepumuk

AW: Handle von Window finden, wenn WindowText leer
14.05.2013 08:15:56
Window
Nein, der Klassenname der Fenster ist immer gleich.
Ist meine Annahme, dass die Reihenfolge der Fenster immer konstant ist, richtig?
Dann könnte ich meine GetWindow Abfrage mehrfach wiederholen, also jeweils mit dem Handle, der bei der vorherigen Abfrage wiedergegeben wurde...
Mein Code:
Private Declare Function FindWindow _
Lib "user32" _
Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) _
As Long
Private Declare Function GetWindow _
Lib "user32" ( _
ByVal hWnd As Long, _
ByVal wCmd As Long) _
As Long
Const GW_Child = 5
Const GW_HWNDNEXT = 2
Sub test()
Dim hWndParent As Long, hWndChild As Long
hWndParent = FindWindow(vbNullString, "Externes Programm")
hWndChild = GetWindow(hWndParent, GW_Child)
hWndParent = hWndChild
hWndChild = GetWindow(hWndParent, GW_Child)
hWndChild = GetWindow(hWndChild, GW_HWNDNEXT)'Hier gehe ich zum zweiten Fenster
hWndParent = hWndChild
hWndChild = GetWindow(hWndParent, GW_Child)
hWndParent = hWndChild
hWndChild = GetWindow(hWndParent, GW_Child)
hWndParent = hWndChild
hWndChild = GetWindow(hWndParent, GW_Child)
hWndParent = hWndChild
hWndChild = GetWindow(hWndParent, GW_Child)
hWndChild = GetWindow(hWndChild, GW_HWNDNEXT)'Hier gehe ich zum zweiten Fenster
hWndParent = hWndChild
hWndChild = GetWindow(hWndParent, GW_Child)
hWndParent = hWndChild
hWndChild = GetWindow(hWndParent, GW_Child)
hWndParent = hWndChild
hWndChild = GetWindow(hWndParent, GW_Child)
hWndParent = hWndChild
hWndChild = GetWindow(hWndParent, GW_Child)
Debug.Print Hex(hWndChild)
End Sub
Ist diese Lösung stabil? Kann man das irgendwie besser machen?

Anzeige
AW: Handle von Window finden, wenn WindowText leer
14.05.2013 08:39:24
Window
Hallo,
dass die Klassennamen der Fenster immer gleich sind, davon bin ich ausgegangen. Ich wollte nur wissen, ob der Klassenname eindeutig ist, oder ob es andere Fenster mit genau dem selben Klassennamen gibt. Wie heißt die Fensterklasse denn? Dann könnte ich dir sagen ob er eindeutig ist oder nicht.
Deine Konstruktion sucht irgendwelche Fenster, da kannst du dir sicher sein dass das nicht funktioniert, denn auf die Reihenfolge hast du keinen Einfluss.
Ich würde erst alle Windows enumerieren und die Handles der bestimmten Klasse in eine Array schreiben. Dann die Child-Windows zu diesen Handles enumerieren, denn die sollten ja immer gleich sein. Auf die Art könntest du Fenster, welche den selben Klassennamen haben, aber nicht zu den gewünschten gehören, aussortieren.
Schau dir die Funktionen EnumWindows, EnumChildWindows und GetClassName an.
Gruß
Nepumuk

Anzeige
AW: Handle von Window finden, wenn WindowText leer
14.05.2013 09:19:36
Window
Sorry, ich habe mich unklar ausgedrückt. Die anderen Fenster haben den gleichen Klassennamen, der Klassenname ist also NICHT eindeutig.
Der Klassenname ist:
WindowsForms10.Window.8.app.0.218f99c

AW: Handle von Window finden, wenn WindowText leer
14.05.2013 09:36:10
Window
Hallo,
also doch alle Fenster durchgehen. Alle Handles mit diesem Klassennamen merken. Alle Child-Windows dieser Handels durchgehen und wenn sie dem Muster entsprechen, dann hast du das Fenster.
Gruß
Nepumuk

307 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige