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

Unsere 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.

JETZT KONTAKTIEREN

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.

JETZT KONTAKTIEREN