vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Oberfläche · Fenster   |   VB-Versionen: VB614.05.09
Fensterhandle anhand der Titelzeile ermitteln

Mit dieser Funktion lässt sich das Handle eines Fenster anhand dessen (Teil-)Titelzeile ermitteln und auf Wunsch aktivieren.

Autor:   Dieter OtterBewertung:  Views:  31.677 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Wie lässt sich das Handle eines Fensters anhand dessen Fenstertitel ermitteln?
Die Antwort lautet: mit Hilfe der FindWindow API-Funktion.

Leider funktioniert das nur dann korrekt, wenn man den exakten Fenstertitel kennt, wobei sogar die Groß-/Kleinschreibung beachtet werden muss!

Was aber, wenn man bspw. nur den Anfang des Fenstertitels weiß?
In diesem Fall hilft uns ab sofort unsere neue Funktion FindWindowHandle weiter. Wir durchlaufen einfach alle Fenster und vergleichen deren Titelzeile via LIKE Operator mit der gesuchten Titelzeile. Stimmt diese überein, wird das Fensterhandle als Funktionswert zurückgeliefert.

Kopieren Sie nachfolgenden Code in ein Modul:

Option Explicit
 
' benötigte API-Deklarationen
Private Declare Function FindWindow Lib "user32" _
  Alias "FindWindowA" ( _
  ByVal lpClassName As String, _
  ByVal lpWindowName As String) As Long
 
Private Declare Function GetWindowTextLength Lib "user32" _
  Alias "GetWindowTextLengthA" ( _
  ByVal hwnd As Long) As Long
 
Private Declare Function GetWindowText Lib "user32" _
  Alias "GetWindowTextA" ( _
  ByVal hwnd As Long, _
  ByVal lpString As String, _
  ByVal cch As Long) As Long
 
Private Declare Function GetWindow Lib "user32" ( _
  ByVal hwnd As Long, _
  ByVal wCmd As Long) As Long
 
Private Const GW_HWNDNEXT = 2
' Ermittelt das Handle eines Fensters anhand dessen Fenstertitel
'
' sTitel: muss nicht der exakte Fenstertitel sein
'         hier kann bspw. auch nur der Anfang des Fenstertitel
'         angegeben werden, z.B.: Fenstertitel*
'
Public Function FindWindowHandle(ByVal sTitle As String) As Long
  Dim lngHWnd As Long
  Dim sText As String
 
  ' alle Fenster durchlaufen
  lngHWnd = FindWindow(vbNullString, vbNullString)
  Do While lngHWnd <> 0
 
    ' Fensterttitel ermitteln
    sText = GetWindowTitle(lngHWnd)
    If Len(sText) > 0 And LCase$(sText) Like LCase$(sTitle) Then
      FindWindowHandle = lngHWnd: Exit Do
    End If
 
    ' Nächstes Fenster
    lngHWnd = GetWindow(lngHWnd, GW_HWNDNEXT)
  Loop
End Function
' Hilfsfunktion zum Ermitteln des Fenstertitels
Public Function GetWindowTitle(ByVal hwnd As Long) As String
  Dim lResult As Long
  Dim sTemp As String
 
  lResult = GetWindowTextLength(hwnd) + 1
  sTemp = Space(lResult)
  lResult = GetWindowText(hwnd, sTemp, lResult)
  GetWindowTitle = Left(sTemp, Len(sTemp) - 1)
End Function

Aufrufbeispiel:
Es wird nach dem Handle eines Fensters gesucht, dessen Titelzeile mit "MyApplication [" beginnt:

Dim hWnd As Long
hWnd = FindWindowHandle("MyApplication [*")
If hWnd <> 0 Then ...

Erweiterung:
Wird das gesuchte Fensterhandle gefunden, soll dieses autom. aktiviert und in den Vordergrund gebracht werden.

Fügen Sie hierzu noch folgende API-Funktion in das Modul ein:

Private Declare Function SetForegroundWindow Lib "user32" ( _
  ByVal hwnd As Long) As Long

Und hier der Code:

Dim hWnd As Long
 
' Fensterhandle suchen
hWnd = FindWindowHandle("Fenstertitel")
 
If hWnd <> 0 Then
  ' Fenster aktivieren und in den Vordergrund holen
  SetForegroundWindow hWnd
End If



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.