none
Aus der MSDN Hotline: Fenster anhand eines Teils des Namens identifizieren (VBA) RRS feed

  • Allgemeine Diskussion

  • Hallo zusammen,

    heute wurde uns bei der MSDN Hotline unter anderem folgende Frage gestellt:  
    Wie findet man eigentlich ein Fenster anhand eines Teils seines Namens in VBA?

    Unsere Antwort bzw. unser Lösungsvorschlag darauf war:
    Die Antwort auf diese Frage hat bereits jemand in Code gefasst , wobei im selben Thread auf eine Alternative verwiesen wird .

    Zur besseren Lesbarkeit drucken wir den Code aus der ersten Variante hier nochmal ab (Credits unverändert). Im Prinzip werden hier die selben Funktionen verwendet, wie man sie auch beim Suchen über den kompletten Namen braucht. Wenn Ihr Code also bereits die user32.dll referenziert, müssen Sie die oberen Zeilen natürlich nicht noch einmal einfügen. Die Click-Methode aus dem Original haben wir hier mit der Open-Methode zur Verwendung in Word ersetzt.

    Option Explicit
    '<VB/OUTLOOK GURU 01/30/2004 - CODE TO FIND WINDOW HANDLE BASED ON PARTIAL WINDOW CAPTION>
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, _
    ByVal lpWindowName As String) 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 GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd 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
    
    Private Function GetHandleFromPartialCaption(ByRef lWnd As Long, ByVal sCaption As String) As Boolean
      Dim lhWndP As Long
      Dim sStr As String
      
      GetHandleFromPartialCaption = False
      lhWndP = FindWindow(vbNullString, vbNullString) 'PARENT WINDOW
      
      Do While lhWndP <> 0
        sStr = String(GetWindowTextLength(lhWndP) + 1, Chr$(0))
        GetWindowText lhWndP, sStr, Len(sStr)
        
        sStr = Left$(sStr, Len(sStr) - 1)
        
        If InStr(1, sStr, sCaption) > 0 Then
          GetHandleFromPartialCaption = True
          lWnd = lhWndP
          Exit Do
        End If
        lhWndP = GetWindow(lhWndP, GW_HWNDNEXT)
      Loop
    End Function
    
    Private Sub Document_Open()
      Dim h As Long
      Dim res As Boolean
      
      res = GetHandleFromPartialCaption(h, "Word")
      MsgBox (res)
    End Sub
    

    Wir hoffen, vielen Besuchern der MSDN Foren durch das Posten dieses Problems und einer möglichen Lösung weiterhelfen zu können.

    Viele Grüße,
    Jonathan Best
    MSDN Hotline für MSDN Online Deutschland

    Disclaimer:
    Bitte haben Sie Verständnis dafür, dass wir hier auf Rückfragen gar nicht oder nur sehr zeitverzögert antworten können.
    Bitte nutzen Sie für Rückfragen oder neue Fragen den telefonischen Weg über die MSDN Hotline: http://www.msdn-online.de/Hotline  
    MSDN Hotline: Schnelle & kompetente Hilfe für Entwickler: kostenfrei!

    Es gelten für die MSDN Hotline und dieses Posting diese Nutzungsbedingungen , Hinweise zu Markenzeichen sowie die allgemein gültigen Informationen zur Datensicherheit sowie die gesonderten Nutzungsbedingungen für die MSDN Hotline .

    • Verschoben Jonny Best Dienstag, 29. Juni 2010 09:52 MSDN Hotline Forum (aus:Aus der MSDN Hotline: Häufig gestellte Fragen und deren Antworten)
    Freitag, 4. Juni 2010 16:17