![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Plamenk |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 258 Регистрация: 18.2.2003 Репутация: нет Всего: 3 |
Как можно получить список всех выполняющихся приложений, т.е. те которые можно переключать с помощью Alt+Tab.
Заранее всем СПАСИБО! |
|||
|
||||
| GriKo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 7.6.2003 Где: Израиль Репутация: нет Всего: нет |
Через WinAPI можно... Функция GetWindow называется, помоему.
|
|||
|
||||
| Plamenk |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 258 Регистрация: 18.2.2003 Репутация: нет Всего: 3 |
Мне нужно получить список не зная ни HWND окна, ни PID процесса, так что GetWindow() не поможет.
Это сообщение отредактировал(а) Plamenk - 30.7.2003, 19:00 |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Перечисляй все окна, находящиеся сразу под корневым (рабочим столом) с помощью EnumWindows() или так:
Это сообщение отредактировал(а) mr.DUDA - 30.7.2003, 21:30 -------------------- ![]() |
|||
|
||||
| RAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
EnumWindows специально для этого и предназначена.
|
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Да, но придется писать callback-функцию, легче все-таки циклом.
Зы, кстати на один процесс приходится (обычно) 2-10 окон, так что нужно сделать проверку при добавлении в список процессов - есть ли такой. А еще будет туча геморойных системных окошек со своими процессами -------------------- ![]() |
|||
|
||||
| RAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
Нормальное приложение не будет все подряд окна с NULL в качестве родительского окна использовать и они в перебор не попадут. Именно по-этому не следует использовать в своих приложениях MessageBox(NULL,......). А надо ли проверять процессы это пусть хозяин топика сам думает, например, если запустить Word несколько раз, то, нажав Ctrl+Alt+Del, мы увидим кучу приложений Word и один единственный процесс WINWORD.EXE. Это сообщение отредактировал(а) RAN - 31.7.2003, 12:11 |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Как насчет чтобы убедиться: ![]() И вообще-то NULL в FindWindowEx означает не дескриптор десктопного окна, а то что искать надо под десктопом. Это корень всех окон. Создавая окно без родителя, ты создаешь его под десктопом. -------------------- ![]() |
|||
|
||||
| RAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
А я и говорю EnumWindows используйте, она по уровням не скачет, а перебирает только окна высшего уровня, а FindWindowEx все, что ниже указанного.
именно дескриптор десктопа и есть. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
RAN, зайди в Spy++ и посмотри Handle своего окна Desktop.
На скрине он равен 0x80. Как и любой другой дескриптор, HWND равный нулю не является дескриптором существующего объекта. Можешь спросить у ASM'еров, они тебе подробно объяснят почему. Это сообщение отредактировал(а) mr.DUDA - 31.7.2003, 13:10 -------------------- ![]() |
|||
|
||||
| Ziga |
|
|||
|
Unregistered |
1) ispolzuj Tool Help API (v MSDN ilji poischi v http://msdn.microsoft.com/).
vot chto pro nhjevo pishet v helpe "The functions provided by the tool help library make it easier for you to obtain information about currently executing Win32®-based applications. These functions are designed to streamline the creation of Win32-hosted tools, specifically debuggers." 2) nje hochu sovratj, no na skolko pomnju, MS Performance Monitor plzovaljsa kakimi to COM interfeisami dlja poluchhenjija sistemnoi informaciji, i eti interfaces mozjno ispoljzovatj v svoih aplikacijah. gdjeto v i-nete bilji samples. |
|||
|
||||
| Plamenk |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 258 Регистрация: 18.2.2003 Репутация: нет Всего: 3 |
Дело в том, что перечислая окна с помощью EnumWindow() или FindWindow() я нахожу все окна, большинство из которых мне ненужны, а вопрос именно в том, как отфильтровать именно те приложения которые можно переключать с помощью Alt+Tab.
|
|||
|
||||
| RAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
mr.DUDA, при чём тут asm. Я прекрасно понимаю, что NULL - это не дескриптор, но указание NULL в функциях API вместо дескриптора окна, указывают функции использовать десктоп. Как может NULL быть дескриптором, если это по сути указатель на структуру с инфой об окне.
|
|||
|
||||
| mr.DUDA |
|
||||||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
про дескрипторы - в ответ на это
а про то, как отфильтровать - EnumDesktopWindows перечисляет только
Если бы не гемор с тучей левых окон, можно было бы юзать EnumWindows, а так конечно придется вызывать GetProcessWindowStation /EnumDesktops/EnumDesktopWindows. -------------------- ![]() |
||||||
|
|||||||
| RAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
mr.DUDA, я имел ввиду, что NULL в качестве первого параметра FindWindowEx не является дескриптором, но означает дескриптор десктопного окна, а можно и указать дескриптор другого окно.
P.S. Простите за флейм, не смог удержаться, каюсь |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |