Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, _ ByVal lParam As Long) As LongPrivate Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As _ Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long' The following variables are shared between the main ChildWindows procedure' and the auxiliary (private) ChildWindows_CBK routine' An array of Long holding the handle of all child windows.Dim windows() As Long' The number of elements in the array.Dim windowsCount As Long' Return an array of Long holding the handles of all the child windows' of a given window. If hWnd = 0 it returns all the top-level windows.Function ChildWindows(ByVal hWnd As Long) As Long() windowsCount = 0 If hWnd Then EnumChildWindows hWnd, AddressOf EnumWindows_CBK, 1 Else EnumWindows AddressOf EnumWindows_CBK, 1 End If ' Trim uninitialized elements and return to caller. ReDim Preserve windows(windowsCount) As Long ChildWindows = windows()End Function' The callback routine, common to both EnumWindows and EnumChildWindows.Private Function EnumWindows_CBK(ByVal hWnd As Long, ByVal lParam As Long) As _ Long ' Make room in the array, if necessary. If windowsCount = 0 Then ReDim windows(100) As Long ElseIf windowsCount >= UBound(windows) Then ReDim Preserve windows(windowsCount + 100) As Long End If ' Store the new item. windowsCount = windowsCount + 1 windows(windowsCount) = hWnd ' Return 1 to continue enumeration. EnumWindows_CBK = 1End Function