Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Знак минимизации окна. [D7, XP]


Страницы:   1 2

Псарь ©   (2011-09-26 22:04:00) 

Какое сообщение WM_XXX нужно словить, чтобы узнать минимизировано ли окно или нет.
WM_Size - SIZE_MINIMIZED - Не работает.
IsIconic не подходит.


QAZ   (2011-09-30 10:34:00) [1]


> только в координаты -32000

типа твои -32000 круче моих -32000 ? :))


DVM   (2011-09-29 22:59:00) [2]


> QAZ   (29.09.11 19:17) [35]


> c Win 2000 по Win 7 ничего не поменялось,из чего делаю вывод
> что так работает со времен появления ctrl+d
> для скорости реакции окна перемещаюца в координаты х=-32000
> у=-32000

Я тоже решил проверить. В W7 окна действительно двигаются, только в координаты -32000 и потом скрываются. Причем окну Progman приходит сообщение WM_USER+8. WM_USER+83 это собственно и есть команда показать десктоп.

Значит я обманул насчет Win2000, надо смотреть раньше на Win98 насчет подвижек десктопа. Я хорошо помню, что такое было и я даже читал где то про это на MSDN.

Кстати, окна полностью зависших программ тоже убираются, хотя напрочь игнорируют все сообщения.


QAZ   (2011-09-29 19:17:00) [3]


> Времена Win 2000-XP.

а я взял и проверил ;)
c Win 2000 по Win 7 ничего не поменялось,из чего делаю вывод что так работает со времен появления ctrl+d
для скорости реакции окна перемещаюца в координаты х=-32000 у=-32000
без копирования содержимого
а уже оттуда минимизируются
это для нормальных приложений
у делфийских это происходит с апплетом,а уже он гасит главные окна через Showwindow


DVM   (2011-09-29 16:01:00) [4]


> QAZ   (29.09.11 13:49) [33]


> раньше это кагда?

Времена Win 2000-XP. Сейчас окнами заправляет DWM, поэтому, думаю, нет необходимости что-то куда то двигать. Мне тогда повторить фокус с перекрыванием чужих окон не удалось, хотя в остальном все работало аналогично проводнику.
Сейчас же "доступны" исходники Win 2000, но я в их подробное изучение не вдавался, нет времени да и неинтересно уже.


> тогдаже ты был моложе и наивней :)

Как и все. И много времени было.


QAZ   (2011-09-29 13:49:00) [5]


> насчет последнего я не уверен в современных ОС, но раньше,
>  повторюсь, так и было

раньше это кагда? 7 лет назад уже ХР было 3года,тогдаже ты был моложе и наивней :)


DVM   (2011-09-29 13:34:00) [6]


> QAZ   (29.09.11 12:56) [31]


> это ты про Program Manager?
> для тебя "невозможно закрыть, свернуть, выдвинуть наверх"
> это магия?

Нет, нет это. Ты можешь создать окно, которое ВСЕГДА будет находиться позади всех остальных окон? Не сможешь. Ибо всегда найдется второе такое окно, обрабатывающее WM_WINDOWPOSCHANGING так же как и ты. Так вот под окно шелла ты не подлезешь, как бы не старался. Попробуй, удивишься.
В том то и магия, что проводник пользуется недокументированной функцией, которая удерживает его окно ниже всех. Очевидно примерно так же он вылазит наверх и закрывает собой все окна (насчет последнего я не уверен в современных ОС, но раньше, повторюсь, так и было).


> это всеволиш игнор мессаг с этим связаных,при этом его можно
> спокойно скрыть или выключить :)

Да да, подлезь под проводник или создай такое окно.


> хотя для VCLщиков может это и магия

Кстати, для окон, созданных VCL SetShellWindow не отрабатывает как надо, мешает скрытое окно Application.


> а на win+d реагирует именно проводник и гасит всех кроме
> сибя

Так я тебе о том и говорю. И об этом тебе сказал Игорь. Окно десктопа (того который имеет класс окна Progman, т.е окно проводника) подымается наверх, потом скрываются окна. А окно это необычное.

Я примерно 7 лет назад примерно год изучал работу проводника в виде хобби  так сказать, и попутно пытался создать его аналог по мере сил (на Delphi, чиста на API кстати) поэтому, поверь, знаю о чем говорю.


QAZ   (2011-09-29 12:56:00) [7]


> Нет. Магия есть. Результатом действия этой функции на окно
> (при условии, что ранее эта функция не применялась уже ранее
> к другому окну) является заморозка окна на заднем плане,
>  окно невозможно закрыть, свернуть, выдвинуть наверх. Возможно
> еще что-то делает.

это ты про Program Manager?
для тебя "невозможно закрыть, свернуть, выдвинуть наверх" это магия?
это всеволиш игнор мессаг с этим связаных,при этом его можно спокойно скрыть или выключить :)
хотя для VCLщиков может это и магия
а на win+d реагирует именно проводник и гасит всех кроме сибя


DVM   (2011-09-29 00:12:00) [8]


> QAZ   (28.09.11 10:59) [27]


> можеш попробовать запустить проводник без записи в shell

И что? Проводник не найдя этого ключа в реестре откроется как окно папки. Это вообще тут не при чем.


DVM   (2011-09-29 00:08:00) [9]


> QAZ   (28.09.11 10:59) [27]

вот тут немного о SetShellWindow

http://www.winehq.org/pipermail/wine-devel/2003-October/021368.html


DVM   (2011-09-29 00:03:00) [10]


> QAZ   (28.09.11 10:59) [27]


> десктоп это отец\владелец всех окон и он не может в принципе
> никуда дигаца относительно других

Речь не о том десктопе, а об окне шелла, которое десктоп. Разные вещи.


> эта функция докапываеца до главного окна любого приложения
> записанного в реестре в параметре shell,сообщая системе
> кому слать месаги связаные с "оболочкой"
> и никакой уличной магии

Нет. Магия есть. Результатом действия этой функции на окно (при условии, что ранее эта функция не применялась уже ранее к другому окну) является заморозка окна на заднем плане, окно невозможно закрыть, свернуть, выдвинуть наверх. Возможно еще что-то делает.

Кстати, о каких мессагах ты говоришь, распиши подробнее, раз уж упомянул.


QAZ   (2011-09-28 10:59:00) [11]


> это сообщение никак не влияет на положение и размеры окна

оно не влияет,а информирует что стало,а большего нам и не надо в данном вопросе

> Одного только WM_SHOWWINDOW недостаточно бывает, чтобы спрятать
> все окна и показать рабочий стол. Если окно не отвечает,
>  то оно не будет скрыто таким образом. А тем не менее, окна
> зависших приложений тоже скрываются. Тут действует комплекс
> мер.

эта месага тоже информационная,ставит перед фактом что уже стало с окном
само окно скрывает винда и ей пофиг зависший процесс или нет
окно получит это сообщение после отвиса,если отвиснет вообще

> Не совсем так. Не знаю как сейчас, но раньше такое действительно
> имело место.

десктоп это отец\владелец всех окон и он не может в принципе никуда дигаца относительно других

> Окно проводника - не обычное окно. К нему примененена недокументированная
> функция SetShellWindow, которая и наделяет окно некоторым
> приоритетом надо остальными окнами. Тут действительно некоторые
> догадки ибо недокументировано.

эта функция докапываеца до главного окна любого приложения записанного в реестре в параметре shell,сообщая системе кому слать месаги связаные с "оболочкой"
и никакой уличной магии
можеш попробовать запустить проводник без записи в shell


DVM   (2011-09-27 23:08:00) [12]


> QAZ   (27.09.11 22:48) [24]


> а вот WM_WINDOWPOSCHANGED самая зачетная
>
>

это сообщение никак не влияет на положение и размеры окна


DVM   (2011-09-27 22:58:00) [13]


> QAZ   (27.09.11 20:58) [18]
>
> > Dennis I. Komarov ©   (27.09.11 20:46) [17]
> > Надо лезть в генофонд, ибо [10]
>
> в [10] описан догадочный бред

Не совсем так. Не знаю как сейчас, но раньше такое действительно имело место.


> Игорь Шевченко ©   (27.09.11 22:19) [20]
> QAZ   (27.09.11 20:58) [18]
>
> Уел, однако. Действительно WM_SHOWWINDOW приходит при WIN+D


Одного только WM_SHOWWINDOW недостаточно бывает, чтобы спрятать все окна и показать рабочий стол. Если окно не отвечает, то оно не будет скрыто таким образом. А тем не менее, окна зависших приложений тоже скрываются. Тут действует комплекс мер.

Окно проводника - не обычное окно. К нему примененена недокументированная функция SetShellWindow, которая и наделяет окно некоторым приоритетом надо остальными окнами. Тут действительно некоторые догадки ибо недокументировано.


QAZ   (2011-09-27 22:48:00) [14]


> оно приходит всегда

не, вру, это у меня всегда приходит
для простых смертных для WIN+D
а вот WM_WINDOWPOSCHANGED самая зачетная


Омлет   (2011-09-27 22:35:00) [15]

Есть ещё одна точка зрения: http://blogs.msdn.com/b/oldnewthing/archive/2008/01/15/7113860.aspx)


QAZ   (2011-09-27 22:27:00) [16]


> Игорь Шевченко ©   (27.09.11 22:19) [20]

оно приходит всегда


QAZ   (2011-09-27 22:24:00) [17]


> Омлет ©   (27.09.11 21:58) [19]
> > QAZ   (27.09.11 20:33) [16]
>
> Вы вообще читали их описание в msdn?

читал,хочеш поспорить?


Игорь Шевченко   (2011-09-27 22:19:00) [18]

QAZ   (27.09.11 20:58) [18]

Уел, однако. Действительно WM_SHOWWINDOW приходит при WIN+D


Омлет   (2011-09-27 21:58:00) [19]

> QAZ   (27.09.11 20:33) [16]

Вы вообще читали их описание в msdn?

http://msdn.microsoft.com/en-us/library/ms632646(VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms632645(VS.85).aspx


QAZ   (2011-09-27 20:58:00) [20]


> Dennis I. Komarov ©   (27.09.11 20:46) [17]
> Надо лезть в генофонд, ибо [10]

в [10] описан догадочный бред


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо