The following code worked for me. The IsWindowVisible function is simply declared and the Microsoft scripting runtime library is added for my project.
Public Declare Function EnumWindows Lib "User32" (ByVal lpEnumFunc As Long, _ ByVal param As Long) As Long Public Declare Function GetWindowText Lib "User32" Alias "GetWindowTextA" _ (ByVal hWnd As Long, _ ByVal lpString As String, _ ByVal cch As Long) As Long Public Declare Function IsWindowVisible Lib "User32" (ByVal hWnd As Long) As Long Public Const MAX_LEN = 260 Public results As Dictionary Public criteria As String Public Sub Example() criteria = "win32" Set results = New Dictionary Call EnumWindows(AddressOf EnumWindowCallback, &H0) Dim result As Variant For Each result In results.Keys Debug.Print result & " - " & results(result) Next result End Sub Public Function EnumWindowCallback(ByVal hWnd As Long, ByVal param As Long) As Long Dim retValue As Long Dim buffer As String If IsWindowVisible(hWnd) Then buffer = Space$(MAX_LEN) retValue = GetWindowText(hWnd, buffer, Len(buffer)) If retValue Then If InStr(1, buffer, criteria, vbTextCompare) > 0 Then results.Add hWnd, Left$(buffer, retValue) End If End If End If EnumWindowCallback = 1 End Function
source share