Другие языки программирования и технологии

C++ Win32 API Какой функцией получить открытые в текущий момент окна?

Например: блокнот, калькулятор, окно ms_word (находящиеся в видимой области на рабочем столе). Пробовал EnumWindows+Proc, но отсекать ненужные, сущий геморрой, тем более в видимой области находятся и панель задач и трей и пуск и часы, а невидимых уйма!
Вот в Visual Basic 6.0, может разберешься:
При вызове fEnumWindows в ListBox пишутся все названия окон (можно и hWnd)
P.S. Тут, конечно, не весь код, но тебе его и не в vb вставлять. .
--------------------------------------------------------------

Public Function fEnumWindows(lst As ListBox) As Long
With lst
.Clear
Call EnumWindows(AddressOf fEnumWindowsCallBack, .hWnd)
fEnumWindows = .ListCount
End With
End Function

Private Function fEnumWindowsCallBack(ByVal hWnd As Long, ByVal lParam As Long) As Long
Dim lReturn As Long
Dim lExStyle As Long
Dim bNoOwner As Boolean
Dim sWindowText As String

If hWnd <> Me.hWnd Then
If IsWindowVisible(hWnd) Then
If GetParent(hWnd) = 0 Then
bNoOwner = (GetWindow(hWnd, GW_OWNER) = 0)
lExStyle = GetWindowLong(hWnd, GWL_EXSTYLE)

If (((lExStyle And WS_EX_TOOLWINDOW) = 0) And bNoOwner) Or _
((lExStyle And WS_EX_APPWINDOW) And Not bNoOwner) Then
'
' Get the window's caption.
'
sWindowText = Space$(256)
lReturn = GetWindowText(hWnd, sWindowText, Len(sWindowText))
If lReturn Then
'
' Add it to our list.
'
sWindowText = Left$(sWindowText, lReturn) '& "*Softshell_Logi*" & hWnd
lReturn = SendMessage(lParam, LB_ADDSTRING, 0, ByVal sWindowText)
Call SendMessage(lParam, LB_SETITEMDATA, lReturn, ByVal hWnd)
End If
End If
End If
End If
End If
fEnumWindowsCallBack = True
End Function
Pbl4Ihet
Pbl4Ihet
2 797
Лучший ответ
Шариф Cангов да api он и в Африке api,
Отфильтровываются только те окна которые на рабочем столе располагаются?
Шариф Cангов И помимо панели задач?
Что значит "получить открытые в текущий момент окна? "
Получить хэндлы окон или их заголовки? =) И что значит "открытое окно"?))))
Марк Булыгин
Марк Булыгин
15 097
Шариф Cангов Со всем уважением, Вы не мыслитель а умник =))))
Открытые в текущий момент окна - окна отображенные на экране монитора, помимо Shell_TrayWnd, Progman и всех их потомков.
Я рассчитывал найти функцию замену для EnumWindows, посмотрел все в МСДН - не оказалось. Решил узнать чужой опыт, задав вопрос - вроде успешно. Спасибо.