Отвечает: Залетин Виталий Викторович
Здравствуйте, Dushin Igor!
Можно через определенный промежуток времени перчислять все окна в системе и искать либо по заголовку, либо по имени класса свое. Например, так:
Declare Function EnumWindows Lib "user32.dll" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
это функция, которая занимается всей черной работой
---------------------------------------------------------------------------
Public Function EnumWindowsProc (ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim sLength As Long, WinText As String ' Длина строки (текста) в заголовке
Dim RetVal As Long 'Возвращаемое значение (можно и игнорировать)
Dim buffer as String
sLength = GetWindowTextLength(hwnd) + 1 'Длина текста в заголовке найденного окна
If slength > 1 'Если текст в заголовке есть...
buffer = Space(slength) ' Делаем буфер для помещения в него заголовка окна
retval = GetWindowText(hwnd, buffer, slength) 'Получаем текст заголовка
Form1.ListBox.Additem "Окно с номером " & cstr(hwnd) & " имеет заголовок '" & Left$(buffer,slength) & "'"
End If
EnumWindowsProc = 1 'Вернем 1 если все классно. Можно вернуть 0 и тогда больше перечисления не будет
End Function
Теперь вызываем само перечисление:
--------------------------------------------------
Private Sub Command1_Click()
EnumWindows AddressOf EnumWindowsProc, 0
End sub
Вместо заголовка окна можно еще получить имя его класса вот этой функцией:
------------------------------------------------------------------------------------------------------------
Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Вызывается аналогично: задайте буфер в 255 символов, передайте его в функцию, и дальше все по аналогии.
--------- Учиться никогда не поздно. Особенно программированию!