You can use the FindWindowEx API, it has a Parameter which specifies which Window Handle to Start Looking From, so you could write a Function to Return an Array of all Windows Matching the Class and/or Caption criteria, ie.
Code:
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Public Function GetHwnds(ByVal Class As String, ByVal Caption As String) As Variant
Dim lHwnd() As Long
Dim lCount As Long
Dim lHandle As Long
ReDim lHwnd(0)
Do
lHandle = FindWindowEx(0, lHandle, Class, Caption)
If lHandle Then
ReDim Preserve lHwnd(lCount)
lHwnd(lCount) = lHandle
lCount = lCount + 1
End If
Loop While lHandle
GetHwnds = lHwnd
End Function
Example of Usage:
Code:
Private Sub Command1_Click()
Dim lHwnd As Variant
Dim iIndex As Long
lHwnd = GetHwnds("NotePad", vbNullString)
For iIndex = 0 To UBound(lHwnd)
If lHwnd(iIndex) Then
'Do Whatever with the Window Handle Here..
Debug.Print lHwnd(iIndex)
End If
Next
End Sub