Declare Function EnumThreadWindows Lib "user32" (ByVal dwThreadId As Long, _ ByVal lpfn As Long, _ ByVal lParam As Long) As Long
EnumThreadWindows перебирает все окна, принадлежащие заданному потоку. Функция передает описатели обнаруженных окон функции обратного вызова.
' Показываем заголовки всех окон, ' принадлежащих потоку Form1 ' *** Расположите код в модуле,т.к. используется ' функция обратного вызова *** Public Function EnumThreadWndProc (ByVal hwnd As Long, ByVal lParam As Long) As Long Dim slength As Long, wintext As String ' заголовки окон и их длина Dim retval As Long ' возвращаемое значение Static winnum As Integer ' счетчик, содержащий число перечисленных окон winnum = winnum + 1 slength = GetWindowTextLength(hwnd) + 1 ' получаем длину строки у заголовков окна If slength > 1 buffer = Space(slength) ' отводим место для буфера retval = GetWindowText(hwnd, buffer, slength) ' получаем заголовок Debug.Print "Window #"; winnum; " : "; ' показываем число перечисленных окон Debug.Print Left(buffer, slength - 1) ' показываем заголовки перечисленных окон End If EnumThreadWndProc = 1 End Function ' *** Код для перечисления окон. Поместите в любом вашем месте *** Dim threadid As Long, processid As Long ' получим id для потока и процесса Form1 Dim retval As Long ' возвращаемое значение ' Определим поток, принадлежащую окну Form1 threadid = GetWindowThreadProcessId(Form1.hWnd, processid) ' Используем функцию обратного вызова для перечисления всех окон потока retval = EnumThreadWindows(threadid, AddressOf EnumThreadWndProc, 0)