Сделать это можно двумя способами.
Первый способ:
Поместите на форму список (ListBox) и кнопку. Введите
Private Sub Command1_Click() ' Эта функция будет циклично вызывать функцию EnumWindowsProc ' до тех пор, пока не будут перечислены все окна EnumWindows AddressOf EnumWindowsProc, 0 End SubДобавьте модуль кода и введите следующий код
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 EnumWindows Lib "user32" _ (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long Public Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lpData As Long) As Long Dim text As String Dim l As Long text = Space(144) ' Получаем заголовок окна l = GetWindowText(hwnd, text, 144) ' Добавляем в список заголовок окна плюс его описатель Form1.List1.AddItem Left$(text, l) + " hwnd=" + Str$(hwnd) ' Перед тем, как добавлять в список очередную программу, ' можно проверить видна ли она на экране ' If IsWindowVisible(hwnd) <> 0 Then ' Form1.List1.AddItem Left$(text, l) + " hwnd=" + Str$(hwnd) ' End If EnumWindowsProc = 1 End FunctionВторой способ:
Private Declare Function GetDesktopWindow Lib "user32" () As Long Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, _ ByVal wCmd As Long) As Long Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _ (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long Private Const GW_CHILD = 5 Private Const GW_HWNDNEXT = 2 Private Sub Command1_Click() Dim hwnd As Long ' Получаем описатель рабочего стола hwnd = GetDesktopWindow ' Получаем описатель первого дочернего окна hwnd = GetWindow(hwnd, GW_CHILD) ' Добавляем в список название окна и его описатель List1.AddItem TextFromhwnd(hwnd) + " hwnd=" + Str$(hwnd) Do ' Получаем описатель следующего окна hwnd = GetWindow(hwnd, GW_HWNDNEXT) ' Добавляем в список название окна и его описатель List1.AddItem TextFromhwnd(hwnd) + " hwnd=" + Str$(hwnd) Loop While hwnd <> 0 End Sub ' Функция, возвращающая название окна по его описателю Private Function TextFromhwnd(ByVal hwnd As Long) As String Dim text As String Dim l As Long text = Space(144) l = GetWindowText(hwnd, text, 144) TextFromhwnd = Left$(text, l) End Function