Feststellen, ob ein bestimmtes Windows-Programm gerade läuft
Veröffentlicht am 02.06.2005
Um festzustellen, ob ein bestimmtes Windows-Programm gerade läuft, suchen Sie einfach nach einem Fenster mit einem passenden Titel.
Die Suche nach einem bestimmten Programmfenster können Sie mit den API-Funktionen GetWindow und GetWindowText durchführen.
Die unten abgedruckte Funktion FensterSuchen erwartet ein String-Parameter, der den Titel des gesuchten Fensters darstellt. Wenn die Anwendung mit dem gesuchten Titel gerade nicht läuft, gibt die Funktion den Wert 0 zurück.
Public Const GW_HWNDFIRST = 0
Public Const GW_OWNER = 4
Public Const GW_HWNDNEXT = 2
Declare Function GetWindow Lib "user32" _
(ByVal hWnd As Long, ByVal wCmd As Long) As Long
Declare Function GetWindowText Lib "user32" Alias _
"GetWindowTextA" (ByVal hWnd As Long, _
ByVal lpString As String, ByVal cch As Long) As Long
Declare Function IsWindowVisible Lib "user32" _
(ByVal hWnd As Long) As Long Public
Function FensterSuchen(FensterTitel As String) As Long
Dim hWnd, strTitel As String, ret As Long, Länge As Long
hWnd = GetWindow(Application.hWndAccessApp, GW_HWNDFIRST)
If hWnd Then
Do While hWnd ' alle Fenster durchlaufen
strTitel = String$(255, 0)
Länge = Len(strTitel)
ret = GetWindowText(hWnd, strTitel, Länge) ' Fenstertitel ermitteln
strTitel = Left$(strTitel, InStr(strTitel, Chr$(0)) - 1)
'nur wenn Fenster sichtbar und kein Child-Fenster ist
If IsWindowVisible(hWnd) And GetWindow(hWnd, GW_OWNER) = 0 Then
If strTitel Like FensterTitel Then
FensterSuchen = hWnd ' Fenster gefunden
Exit Function
End If
End If
hWnd = GetWindow(hWnd, GW_HWNDNEXT) ' nächstes Fenster in der Kette ermitteln
Loop
End If
FensterSuchen = 0
End Function
In der Do-Schleife wird für jedes Fenster geprüft, ob es erstens sichtbar ist, und zweitens ob es ein Hauptfenster ist. Stellt die Funktion einen möglichen Kandidaten fest, überprüft sie den Titel mit der Funktion GetWindowTitel. Dieser wird dann mit dem Parameter FensterTitel verglichen.
Damit die Funktion auch Platzhalterzeichen akzeptiert, erfolgt der Vergleich mittels Like-Operator:
If strTitel Like FensterTitel Then
'Titel mit Funktionparameter vergleichen
FensterSuchen = True
'Fenster gefunden
Exit Function
End If
Um beispielsweise festzustellen, ob eine Anwendung mit dem Text „Microsoft“ im Fenstertitel gestartet ist, rufen Sie die Funktion wie folgt auf:
If FensterSuchen("Microsoft*") Then
Debug.Print "Microsoft ist da!"
End If