ich hätte es hier ganz praktisch gefunden:
Private Declare PtrSafe Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Function SearchHndByWndName_Parent(strSearch As String) As Long
Dim strTmp As String * 200
Dim nhWnd As Long
nhWnd = FindWindow(vbNullString, vbNullString)
Do While Not nhWnd = 0
If GetParent(nhWnd) = 0 Then
GetWindowText nhWnd, strTmp, 200
If InStr(strTmp, strSearch) > 0 Then
SearchHndByWndName_Parent = nhWnd
Exit Do
End If
End If
nhWnd = GetWindow(nhWnd, GW_HWNDNEXT)
Loop
End Function
Ich hatte mal den Fall das strSearch größer war als strTmp und dann hat er mir das Fenster eben nicht geschlossen. Ich hab versucht die Begrenzung weg zu lassen, aber dann funktioniert der Code auch nicht mehr. Ich hätte es Praktisch gefunden, wenn ich die Größe daher dynamisch auf die Größe von strSearch begrenzen könnte.
Ich hab es aber jetzt so gelöst:
Private Function SearchHndByWndName_Parent(strSearch As String) As Long
Dim strTmp As String * 200
Dim nhWnd As Long
nhWnd = FindWindow(vbNullString, vbNullString)
Do While Not nhWnd = 0
If GetParent(nhWnd) = 0 Then
GetWindowText nhWnd, strTmp, 200
If InStr(strTmp, Left(strSearch, 200)) > 0 Then
SearchHndByWndName_Parent = nhWnd
Exit Do
End If
End If
nhWnd = GetWindow(nhWnd, GW_HWNDNEXT)
Loop
End Function
Aber falls jemanden doch noch ein anderer Weg einfällt, wäre interessant.
|