Функция EnumThreadWindows

Declare Function EnumThreadWindows Lib "user32" (ByVal dwThreadId As Long, _
    ByVal lpfn As Long, _
	ByVal lParam As Long) As Long

EnumThreadWindows перебирает все окна, принадлежащие заданному потоку. Функция передает описатели обнаруженных окон функции обратного вызова.

dwThreadId
Идентификатор потока, для которой происходит перечисление окон
lpfn
Указатель на функцию обратного вызова EnumThreadWndProc
lParam
Дополнительно значение, передаваемое функции обратного вызова. Определяется программистом

Пример

' Показываем заголовки всех окон,
' принадлежащих потоку 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)

Смотри также

EnumChildWindows, EnumWindows

Категория

Окна