![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| Тутанхамец |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 10.10.2005 Где: в пирамидЕ! Репутация: нет Всего: 6 |
Здравствуйте. Вывожу в listbox все верхнеуровневые видимые окна с помощью EnumWindows. Получилось следующее:
Однако в списке есть окна, которых на экране нет. Например моя же прога, у которой одна форма с visible=false. А еще Program Manager. Как мне найти только те окна, которые на самом деле видно? |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
имхо
EnumWindows+IsWindowVisible -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Тутанхамец |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 10.10.2005 Где: в пирамидЕ! Репутация: нет Всего: 6 |
Нет, результат тот же. Например для дельфы находится три окна, для которых GetWindowText дает: Delphi 7 - Project 1[running], Unit1.pas и Delphi7. Последнего окна на экране не наблюдаю. То же самое для некоторых других программ. А вот например для Блокнота - всё в порядке, одно окно. Что бы это значило?
Добавлено @ 18:23 Такое чувство, что дельфа создает несколько обычных окон, которые все привыкли видеть, и одно как бы основное, особенное. Эта особенность - та же самая, что у окна Program Manager, которое я на экране тоже не вижу. Но в списке оно есть. Сформулируем вопрос так: в чем состоит особенность этих окон и как их отфильтровать из списка? |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
у дельфи приложений, есть 2 окна визуальных(это если одна форма) имхо, одно отвечает за форму
а второе за отображение окна на панельке( таск бар) -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Тутанхамец |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 10.10.2005 Где: в пирамидЕ! Репутация: нет Всего: 6 |
Въехал! "Лишнее" окно Delphi7 - это его "закладка" на Панели Задач! Теперь остается понять, как его отфильтровать.
Добавлено @ 18:28 Синхронно мыслим. |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
имхо окно на палеле будет иметь класс типа Tapplication или унаследован от него
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Тутанхамец |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 10.10.2005 Где: в пирамидЕ! Репутация: нет Всего: 6 |
Это, я так понимаю, в случае с делфи. А мне еще надо избавиться в списке от:
1) окна Program Manager - что это кстати такое? Рабочий стол что ли? 2) всех окон, которые находятся на таскбаре. Ну если програм манагер это рабочий стол, то можно проверять хэндл найденного окна на равенство GetDesktopWindow... Правильно? А со вторым пунктом как быть? Если окно на таскбаре, то таскбар является его owner'ом? А как взять окно самого таскбара? |
|||
|
||||
| Sunvas |
|
|||
|
Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: нет Всего: 89 |
Оттестеный первоклассный код. -------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
| Тутанхамец |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 10.10.2005 Где: в пирамидЕ! Репутация: нет Всего: 6 |
Sunvas, Код первоклассный, но это немножко не то, что мне надо.
Прога моя должна работать так: 1) она вывела в CheckListBox список окон на экране. 2) юзер ставит галочки напротив окон 3) те окна, которые он пометил галочками, становятся TOPMOST. Трабл в том, что окно "Delphi - Project1 [running]" мне нужно иметь в списке. Такое окно юзер, возможно, захочет иметь на переднем плане. А окно "Delphi7", которое на таскбаре, из списка надо вычеркнуть. На фиг его делать TOPMOST. Ты, Sunvas, предлагаешь такое исключительно таскбарное окно отличать по (GetWindow(Wnd, gw_Owner) = 0). Но в этом случае, из списка вылетает и например Acrobat Reader, который юзер минимизировал на таскбар. А он в списке нужен. А теперь, когда я это написал, мне думается вот что: наверное, когда я минимизирую Acrobat, его окно становится невидимым, а на таскбаре возникает совсем другое окно. То есть описываемым способом я не могу сделать TOPMOST минимизированный Acrobat. Я прав? Добавлено @ 19:18 Был не прав. Acrobat Reader становится TOPMOST даже в свернутом виде (когда его потом разворачиваю). Это проги, написанные на делфи, почему-то отличаются от других прог. |
|||
|
||||
| Sunvas |
|
|||
|
Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: нет Всего: 89 |
Закоментируй строку:
И будет тебе счастье. Нет. То, что мы видим на таскбаре, это как бы "главное окно", а все остальные - дочерные. Свернутое окно <> невидимому на программном уровне. -------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
| Тутанхамец |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 10.10.2005 Где: в пирамидЕ! Репутация: нет Всего: 6 |
Ага. В общем ситуация проясняется. Спасибо. Но почему-то прога, написанная на VB, тоже видна в списке, хотя у нее form1.visible=false.
Мое счастье "будет неполным", потому что одни окна с нулевым родителем я хочу видеть в списке, а другие нет. |
||||
|
|||||
| Sunvas |
|
|||
|
Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: нет Всего: 89 |
Получилось примерно так:
-------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
| Тутанхамец |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 10.10.2005 Где: в пирамидЕ! Репутация: нет Всего: 6 |
Да, точно
Я еще отфильтровываю Program Manager и главное окно VB-шных прог:
|
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |