Feststellen, ob ein bestimmtes Windows-Programm gerade läuft

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

Dienstleistungen

Als starker Partner an Ihrer Seite unterstützen wir Sie in folgenden Breichen:

Access-Programmierung

Benötigen Sie Unterstützung bei der Programmierung von Access-Anwendungen? Wir bieten die gesamte Bandbreite von der Access-Programmierung auf Stundenbasis bis zur Durchführung eines Software-Projektes als Auftragsarbeit an. Kontaktieren Sie uns für ein kostenloses Erstgespräch.

Software-Beratung

Haben Sie ein Software-Projekt und Sie wissen nicht, ob Access die richtige Plattform ist? Wir haben über 20 Jahre Erfahrung beim Erstellen von Windows-, Web und mobilen Anwendungen. Kontaktieren Sie uns für eine kostenlose Erstberatung.