![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Знак минимизации окна. [D7, XP]
Псарь © (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] описан догадочный бред