Другие языки программирования и технологии
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
При вызове 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
Что значит "получить открытые в текущий момент окна? "
Получить хэндлы окон или их заголовки? =) И что значит "открытое окно"?))))
Получить хэндлы окон или их заголовки? =) И что значит "открытое окно"?))))
Шариф Cангов
Со всем уважением, Вы не мыслитель а умник =))))
Открытые в текущий момент окна - окна отображенные на экране монитора, помимо Shell_TrayWnd, Progman и всех их потомков.
Я рассчитывал найти функцию замену для EnumWindows, посмотрел все в МСДН - не оказалось. Решил узнать чужой опыт, задав вопрос - вроде успешно. Спасибо.
Открытые в текущий момент окна - окна отображенные на экране монитора, помимо Shell_TrayWnd, Progman и всех их потомков.
Я рассчитывал найти функцию замену для EnumWindows, посмотрел все в МСДН - не оказалось. Решил узнать чужой опыт, задав вопрос - вроде успешно. Спасибо.
Похожие вопросы
- C++ Win32 API - Как создать окно фиксированного размера?
- c++ возврат char из функции
- не очень сложная прога на c++ не робит: Написать функцию, сравнивающую площадь двух треугольников, по координатам их вер
- DEV C++ отсутствуют некоторые НУЖНЫЕ функции
- Вопрос для тех кто знает точный ответ, язык C про функции все подробности вопроса внутри...
- Приведите пожалуйста пример программы на ассемблере, использующая API функцию GlobalMemoryStatus. Заранее спасибо.
- Функции в языке программирования C.
- Как правильно создать и использовать radiobutton-ы на win api c++ ?Можно ли из программы узнать версию Windows ?
- что за The thread 'Win32 Thread' (0xf00) has exited with code 0 (0x0) при написании на visual studia 2008 c++ под windos
- C++ Указатели и функции.
Отфильтровываются только те окна которые на рабочем столе располагаются?