Посмотреть список всех окон
От: hpux100  
Дата: 20.09.11 14:15
Оценка:
Подскажите, можно ли получить список всех окон у запущенных на данный момент приложений.
Re: Посмотреть список всех окон
От: VladFein США  
Дата: 20.09.11 14:32
Оценка: +2 :))) :))) :)
Здравствуйте, hpux100, Вы писали:

H>Подскажите, можно ли получить список всех окон у запущенных на данный момент приложений.


можно
Re[2]: Посмотреть список всех окон
От: hpux100  
Дата: 21.09.11 04:44
Оценка:
Здравствуйте, VladFein, Вы писали:

VF>Здравствуйте, hpux100, Вы писали:


H>>Подскажите, можно ли получить список всех окон у запущенных на данный момент приложений.


VF>можно


а как?
Re[3]: Посмотреть список всех окон
От: CEMb  
Дата: 21.09.11 04:58
Оценка: 2 (1)
Здравствуйте, hpux100, Вы писали:

H>>>Подскажите, можно ли получить список всех окон у запущенных на данный момент приложений.


VF>>можно


H>а как?


Рекурсией, например.
Пишем функцию, которая получает всех детей окна, через

HWND hChild = NULL;
while( hChild = FindWindowEx(hWnd, hChild, NULL, NULL)
{
//тырым-пырым
//где-то тут рекурсивный вызов
}


И зовём её изначально для десктопа, GetDesktopWindow();
А потом внутри для каждого ребёнка.

А ещё, как вариант, есть функции-енумераторы, для топ-окон: EnumWindows, для детей: EnumChildWindows.
Только тут важно помнить, что EnumChildWindows будет перечислять не только прямых детей, а всех детей вообще.
Re[4]: Посмотреть список всех окон
От: kero Россия  
Дата: 21.09.11 12:20
Оценка:
Здравствуйте, CEMb, Вы писали:

CEM>И зовём её изначально для десктопа, GetDesktopWindow();


тогда — список НЕ всех окон

CEM>А ещё, как вариант, есть функции-енумераторы, для топ-окон: EnumWindows, для детей: EnumChildWindows.


аналогично
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[4]: Посмотреть список всех окон
От: Pavel Dvorkin Россия  
Дата: 21.09.11 12:51
Оценка:
Здравствуйте, CEMb, Вы писали:

CEM>Только тут важно помнить, что EnumChildWindows будет перечислять не только прямых детей, а всех детей вообще.


Хм.


The EnumChildWindows function enumerates the child windows that belong to the specified parent window by passing the handle to each child window, in turn, to an application-defined callback function.

Или я что-то не так понял.

А вообще, строго говоря, задача энумерации окон некорректная. Пока мы их энумерируем, там старое окно померло или новое народилось. То-то в Spy++ F5 — Refresh.
With best regards
Pavel Dvorkin
Re[5]: Посмотреть список всех окон
От: kero Россия  
Дата: 21.09.11 14:00
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

CEM>>Только тут важно помнить, что EnumChildWindows будет перечислять не только прямых детей, а всех детей вообще.


PD>Хм.

PD>The EnumChildWindows function enumerates the child windows that belong to the specified parent window by passing the handle to each child window, in turn, to an application-defined callback function.
PD>Или я что-то не так понял.

Можешь не сумлеваться — таки не понял.

PD>А вообще, строго говоря, задача энумерации окон некорректная. Пока мы их энумерируем, там старое окно померло или новое народилось. То-то в Spy++ F5 — Refresh.


В подражание Dvorkin — глубокомысленное
Хм.
Ишь — "задача энумерации окон некорректная".
Пока в Spy++ на окно глазеем — у окна-то и евонный заголовок возьми да изменись, а то и размер/положение/стиль итд итп.
Не доглядел ты, Dvorkin.
А за "То-то в Spy++ F5 — Refresh" спасибо, уморил.

P.S. Строго говоря — почитал бы, что ль, в том же MSDN по-вдумчивее сопоставление GetWindow c Enum(Child)Windows.
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[6]: Посмотреть список всех окон
От: Pavel Dvorkin Россия  
Дата: 21.09.11 14:51
Оценка:
Здравствуйте, kero, Вы писали:

Надоел.
With best regards
Pavel Dvorkin
Re[7]: Посмотреть список всех окон
От: kero Россия  
Дата: 21.09.11 15:22
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, kero, Вы писали:


PD>Надоел.


Так не спамь.
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[5]: Посмотреть список всех окон
От: CEMb  
Дата: 21.09.11 15:49
Оценка:
Здравствуйте, kero, Вы писали:

CEM>>И зовём её изначально для десктопа, GetDesktopWindow();


K>тогда — список НЕ всех окон


CEM>>А ещё, как вариант, есть функции-енумераторы, для топ-окон: EnumWindows, для детей: EnumChildWindows.


K>аналогично


Ну и что я пропустил? Дети тех, кто не в топе?
Да накрайняк я их всех перебором проверю!!!

Кстати, это один из методов отлова руткитов.

PS: Хватит на Павла наезжать
Re[5]: Посмотреть список всех окон
От: CEMb  
Дата: 21.09.11 15:55
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

CEM>>Только тут важно помнить, что EnumChildWindows будет перечислять не только прямых детей, а всех детей вообще.


PD>Хм.



PD>The EnumChildWindows function enumerates the child windows that belong to the specified parent window by passing the handle to each child window, in turn, to an application-defined callback function.


PD>Или я что-то не так понял.


Там колбак подсовывается, в который дети один за другим приходят. Но мне больше нравится FindWindowEx, или GetWindow, потому что в енумах приходят внуки, правнуки и далее... Я не знаю, почему так, но так оно у меня работало, и так в msdn-е где-то написано было. Короче, если дерево там строить — надо проверять, что родитель окна — то что (например) в LPVParam засунули (как я это 7 лет назад делал).

PD>А вообще, строго говоря, задача энумерации окон некорректная. Пока мы их энумерируем, там старое окно померло или новое народилось. То-то в Spy++ F5 — Refresh.


Дык все задачи переписи населения такие
Можно, конечно на эвент про создание окна подписаться, но я думаю, топикстартеру это не надо.
Re[6]: Посмотреть список всех окон
От: kero Россия  
Дата: 21.09.11 16:11
Оценка:
Здравствуйте, CEMb, Вы писали:

CEM>Ну и что я пропустил?


Изучайте классику — http://files.rsdn.ru/42164/wintreesnap.zip
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[6]: Посмотреть список всех окон
От: Pavel Dvorkin Россия  
Дата: 21.09.11 16:12
Оценка:
Здравствуйте, CEMb, Вы писали:


CEM>Там колбак подсовывается, в который дети один за другим приходят. Но мне больше нравится FindWindowEx, или GetWindow, потому что в енумах приходят внуки, правнуки и далее... Я не знаю, почему так, но так оно у меня работало, и так в msdn-е где-то написано было. Короче, если дерево там строить — надо проверять, что родитель окна — то что (например) в LPVParam засунули (как я это 7 лет назад делал).


Да, верно. Я уж не помню, использовал ли я эту функцию когда-либо, наверное, нет.

PD>>А вообще, строго говоря, задача энумерации окон некорректная. Пока мы их энумерируем, там старое окно померло или новое народилось. То-то в Spy++ F5 — Refresh.


CEM>Дык все задачи переписи населения такие




CEM>Можно, конечно на эвент про создание окна подписаться


И уничтожение.

>но я думаю, топикстартеру это не надо.


Это ему решать.
With best regards
Pavel Dvorkin
Re[6]: Посмотреть список всех окон
От: ononim  
Дата: 21.09.11 16:59
Оценка:
CEM>Там колбак подсовывается, в который дети один за другим приходят. Но мне больше нравится FindWindowEx, или GetWindow, потому что в енумах приходят внуки, правнуки и далее... Я не знаю, почему так, но так оно у меня работало, и так в msdn-е где-то написано было. Короче, если дерево там строить — надо проверять, что родитель окна — то что (например) в LPVParam засунули (как я это 7 лет назад делал).
Минздрав Microsoft предупреждает:

The EnumChildWindows function is more reliable than calling GetWindow in a loop. An application that calls GetWindow to perform this task risks being caught in an infinite loop or referencing a handle to a window that has been destroyed.

Думаю к FindWindowEx это тоже относится.
Как много веселых ребят, и все делают велосипед...
Re[7]: Посмотреть список всех окон
От: CEMb  
Дата: 21.09.11 17:33
Оценка:
Здравствуйте, kero, Вы писали:

CEM>>Ну и что я пропустил?


K>Изучайте классику — http://files.rsdn.ru/42164/wintreesnap.zip


Спасибо, что хоть не скрижали

Чтобы тебе нимб голову не погнул:

1. Это нифига не дерево. Надо было листом называть.
2. Работает ооочень долго. Моя искалка, написанная 7 лет назад, тут же отработала за три секунды.
3. Нихрена непонятно. Ну, то есть, понятно, конечно, но в таблице лазить искать, например, кто кому кто — не айс.
3.1. Особенно когда в отладке сидишь, вообще не катит, ждать по 10-20 секунд пока дерево пересоберётся.
4. Никакого оповещения о том что программа завершила работу.
5. Анцестор рут отсутсвует!

Вобщем, сей артефакт:
Пауэр: 5.
Юзабилити: -2.
Re[7]: Посмотреть список всех окон
От: CEMb  
Дата: 21.09.11 17:35
Оценка:
Здравствуйте, ononim, Вы писали:

CEM>>Там колбак подсовывается, в который дети один за другим приходят. Но мне больше нравится FindWindowEx, или GetWindow, потому что в енумах приходят внуки, правнуки и далее... Я не знаю, почему так, но так оно у меня работало, и так в msdn-е где-то написано было. Короче, если дерево там строить — надо проверять, что родитель окна — то что (например) в LPVParam засунули (как я это 7 лет назад делал).

O>Минздрав Microsoft предупреждает:
O>

The EnumChildWindows function is more reliable than calling GetWindow in a loop. An application that calls GetWindow to perform this task risks being caught in an infinite loop or referencing a handle to a window that has been destroyed.

O>Думаю к FindWindowEx это тоже относится.

Хм, надо поэкпериментировать, но я ни разу на дедлок не нарывался. Только если по своей вине
Re[8]: Посмотреть список всех окон
От: kero Россия  
Дата: 21.09.11 18:28
Оценка: +1
Здравствуйте, CEMb, Вы писали:

CEM>1. Это нифига не дерево. Надо было листом называть.

CEM>2. Работает ооочень долго. Моя искалка, написанная 7 лет назад, тут же отработала за три секунды.
CEM>3. Нихрена непонятно. Ну, то есть, понятно, конечно, но в таблице лазить искать, например, кто кому кто — не айс.
CEM>3.1. Особенно когда в отладке сидишь, вообще не катит, ждать по 10-20 секунд пока дерево пересоберётся.
CEM>4. Никакого оповещения о том что программа завершила работу.
CEM>5. Анцестор рут отсутсвует!

CEM>Вобщем, сей артефакт:

CEM>Пауэр: 5.
CEM>Юзабилити: -2.

Отвечу тебе коротко и мягко:
1) все, что ты тут понаписал — безусловная херня недалекого юзера, какой пункт ни возьми,
2) и брось эти свои фирменные восхваления каких-то никому неведомых своих прожек без каких-либо ссылок, кодов и аттачей, таки достала эта болтовня,
чай, тут не форум для хлестаковых и графоманов, и слава богу есть возможности объективной аргументации.
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[7]: Посмотреть список всех окон
От: kero Россия  
Дата: 21.09.11 19:11
Оценка:
Здравствуйте, ononim, Вы писали:

O>

The EnumChildWindows function is more reliable than calling GetWindow in a loop. An application that calls GetWindow to perform this task risks being caught in an infinite loop or referencing a handle to a window that has been destroyed.

O>Думаю к FindWindowEx это тоже относится.

Касательно поведения GetWindow и FindWindowEx довелось заметить следующее.
В обычных условиях (независимо от того, установлено ли IMM/IME или нет)
полное дерево окон через GetWindowTree и полное дерево окон через FindWindowTree полностью совпадают
(GetWindowTree и FindWindowTree см. в исходнике http://files.rsdn.ru/42164/wintreesnap.zip), —
но вот после запуска исходного кода топика ПереZагруZка
Автор: kero
Дата: 12.12.09
, т.е. в условиях сломанной иерархии окон, —
эти деревья оказались искаженными по-разному.
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[9]: Посмотреть список всех окон
От: Carc Россия https://vk.com/gosha_mazov
Дата: 22.09.11 10:58
Оценка: :)
Здравствуйте, kero, Вы писали:

K>Здравствуйте, CEMb, Вы писали:


CEM>>1. Это нифига не дерево. Надо было листом называть.

CEM>>2. Работает ооочень долго. Моя искалка, написанная 7 лет назад, тут же отработала за три секунды.
CEM>>3. Нихрена непонятно. Ну, то есть, понятно, конечно, но в таблице лазить искать, например, кто кому кто — не айс.
CEM>>3.1. Особенно когда в отладке сидишь, вообще не катит, ждать по 10-20 секунд пока дерево пересоберётся.
CEM>>4. Никакого оповещения о том что программа завершила работу.
CEM>>5. Анцестор рут отсутсвует!

CEM>>Вобщем, сей артефакт:

CEM>>Пауэр: 5.
CEM>>Юзабилити: -2.

K>Отвечу тебе коротко и мягко:

K>1) все, что ты тут понаписал — безусловная херня недалекого юзера, какой пункт ни возьми,
K>2) и брось эти свои фирменные восхваления каких-то никому неведомых своих прожек без каких-либо ссылок, кодов и аттачей, таки достала эта болтовня,
K>чай, тут не форум для хлестаковых и графоманов, и слава богу есть возможности объективной аргументации.

Керо, ты не понял просто в ПТУ пересдачи пошли осенние — вот и наплыв!
Aml Pages Home
Re[9]: Посмотреть список всех окон
От: CEMb  
Дата: 23.09.11 02:05
Оценка:
Здравствуйте, kero, Вы писали:

K>Отвечу тебе коротко и мягко:

K>1) все, что ты тут понаписал — безусловная херня недалекого юзера, какой пункт ни возьми,
Чо, пьедестал пошатнулся?
K>2) и брось эти свои фирменные восхваления каких-то никому неведомых своих прожек без каких-либо ссылок, кодов и аттачей, таки достала эта болтовня,
Т.е. тебе можно, а мне нельзя?
K>чай, тут не форум для хлестаковых и графоманов, и слава богу есть возможности объективной аргументации.
Читай иногда свои посты сам Тебе замечания делали несколько человек, тока нимб, наверно, на глаза упал.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.