|
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
|
|
Отслеживание "Свернуть все окна"07.03.2017, 01:37. Показов 3502. Ответов 20
Метки delphi, itaskbarlist, minimized, seattle, trayicon, ttrayicon, win+d, winapi, xe10, делфи, свернуть все окна (Все метки)
Гружу программу в трей, с панели задач убираю вообще (даже когда окно активно). Show/Hide - по клику трея, стандартным способом . И всё бы хорошо, но вот какая подстава - кнопка винды "свернуть все окна" сворачивает их каким-то нестандартным способом, после которого окно из трея обратно уже не разворачивается. Гугление навело на ветку какого-то форума, где проблему пытаются решить аж с 2006 года всевозможными костылями, но ни 1 из них нормально не сработал. Заведомо известно, что решение есть - многие программы либо распознают нажатие "свернуть все окна" и идут от него в трей, либо просто нормально разворачиваются из трея, либо и вовсе не сворачиваются в него.
0
|
|
| 07.03.2017, 01:37 | |
|
Ответы с готовыми решениями:
20
Как свернуть все окна кроме нашей формы? Кнопки и окна: передвинуть, свернуть, развернуть, закрыть. Свернуть все процедуры |
|
пофигист широкого профиля
4770 / 3205 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
|
||
| 07.03.2017, 02:00 | ||
0
|
||
|
|
||
| 07.03.2017, 08:13 | ||
|
В древних вроде сдвигало, в других сворачивает без сообщений окну, кое-где утверждали что в их версии аж виртуальный рабочий стол дёргает. Версия IDE? VCL? Application OnMinimize? Показывайте код.
0
|
||
|
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
|
|||
| 07.03.2017, 11:11 [ТС] | |||
|
0
|
|||
|
|
|
| 07.03.2017, 17:08 | |
|
Так, хорошо. И всё же - вы на VCL делаете проект или на чём? *
0
|
|
|
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
|
|
| 07.03.2017, 20:17 [ТС] | |
|
GoodWeather, да, это VCL. Я наверное не до конца корректно описал, что мне надо.
Есть иконка в трее, на панели задач вообще нет никогда ничего. И вот 1 раз кликаешь иконку - форма скрывается, второй раз - появляется. Проблема возникает, когда юзер нажимает "свернуть все окна" - форма переходит в неведомое мне состояние, и прога фактически умирает, т.к. вытащить её обратно можно только через таскменеджер. Вот от этого избавиться надо.
0
|
|
|
|
|
| 10.03.2017, 03:47 | |
|
Извиняюсь за задержку, дел навалилось.
Да, проблема повторяется. Оно ещё осложнено тем что главное окно - Application, а основная Form1 - как бы ведомое, скорее всего без подобной этажерки было бы проще. Думаю VCL не замечает что свойства окна изменились и игнорирует команды. Вы используете встроенный TrayIcon1? Какой BorderStyle? А как конкретно скрываете с панели?
0
|
|
|
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
|
|||||||||||||||
| 10.03.2017, 19:46 [ТС] | |||||||||||||||
Немного покурив WinAPI, я пришёл к следующим выводам: 1) При нажатии "свернуть все окна" visible окна остаётся в true, просто оно перемещается куда-то в конец Z-буфера. 2) При клике по иконке в трее окно, даже если оно было активным, сначала делается неактивным, перемещаясь в Z-буфере на довольно произвольную (не "следующее за активным"), и только потом управление передаётся на обработчик. Соответственно, нужно: а) Если окно вообще невидимо (visible=false) - сделать его видимым и активным. С этим проблем нет. б) Если окно видимо и неактивно - сделать его активным. в) Если окно видимо и только что было активно - сделать его невидимым. Вот с идентификацией пунктов б) и в) имеются большие проблемы ввиду пункта 2). У кого какие мысли?
0
|
|||||||||||||||
|
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
|
||||||
| 11.03.2017, 22:12 [ТС] | ||||||
|
Решение найдено!
Пусть и не совсем точно соответствующее ТЗ, но полностью меня устраивающее. Оно настолько шедеврально, что заслуживает премии "Золотой Костыль".
0
|
||||||
|
|
||||||||||||||||||||||
| 12.03.2017, 11:33 | ||||||||||||||||||||||
![]() Добавлено через 55 секунд XE10 это Seattle штоле? Там уже должно быть встроенным TTrayIcon - есть смысл использовать его, нежели голый API:
Добавлено через 3 минуты вот... Далее я потестил как убирать приложение с ПанелиЗадач - что-то большинство способов из её величества Гугла кривые до чёртиков... И то работают, то не работают, то приводят окно в неработоспособное состояние - в зависимости от способа и версии ОС... Скорее всего наиболее предпочтительно работать с ITaskbarList:
Добавлено через 3 минуты И у меня "хитросвёрнутое" окно вполне себе появляется при:
В остальных случаях считаю вполне разумно пользоваться методами VCL.
1
|
||||||||||||||||||||||
|
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
|
||||||||||||||
| 12.03.2017, 13:08 [ТС] | ||||||||||||||
На ХР вроде всё работает. Но у меня в Win7 стандартная панель задач на Classic Shell заменена, так что не знаю, что там в родной семёрочной творится.
0
|
||||||||||||||
|
|
||||
| 12.03.2017, 16:06 | ||||
|
Да можно цельную таблицу составляти, по версиям ОС (а то и хуже): где заработало, где спустя время само появляется обратно, где вообще без эффектов, а где окно изуродовалось до безумия.
Добавлено через 1 час 50 минут Как верно сказали: Win+D (оно же Свернуть все окна) на самом деле делает сворачивание, я проверял: приходят соответствующие сообщения, добавляются соответствующие стили, это можно отловить... Но не на всех ОС. Сейчас у меня "семёрка" - окну при Win+D не приходит практически вообще ничего.А ещё такое мнение имеется:
И думаю это всё равно не объясняет полного отсутствия сообщений...
0
|
||||
|
пофигист широкого профиля
4770 / 3205 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
|
||
| 13.03.2017, 03:56 | ||
|
Я могу ответить вам. Команда "свернуть все окна", дурацкая команда (имхо), просто выводит на передний план (на верх Z-order) окно рабочего стола.
0
|
||
|
|
|
| 13.03.2017, 15:35 | |
|
Не по теме: ой... Я не знал... Искренне жаль, хороший был человек. Добавлено через 4 минуты И такое слышал, говорившие доказывали это тем что окно десктопа становится активным/верхним/передним или как-то так. Но вот незадача... Если свернуть все окна (хоть по Win+D на той ОС где тот реально сворачивает, хоть руками всё свернуть) - рабочий стол правда становится верхним и активным. Но не потому что его "подняли", а потому что всё остальное "опустили" и кроме него просто больше ничего не осталось - разумеется он активный/верхний/передний.Ладно, предположим что на некоторых ОС это правда работает так. Как достоверно проверить? Как это сделать не по Win+D, а программно из своего кода (чтоб сравнить получаемый эффект с Win+D)? И как это событие хотя бы отловить/отследить?
0
|
|
|
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
|
||||
| 13.03.2017, 15:51 [ТС] | ||||
|
0
|
||||
|
|
|
| 13.03.2017, 17:58 | |
|
Как удалось обойтись? На версии ОС где нет (почти) никаких сообщений окну работать же не станет...
Ставить хук это странно и подозрительно. Да и вообще как костыль какой-то. Насчёт проверки есть ли "вывод другого дектопа" я застрял на "как определить что за десктоп активен в данный момент", если вдруг кто знает - просветите пожалуйста. Смог только получить список "WindowStations" и список "Desktops", на семёрке в списках по два элемента, и списки почему-то одинаковые. Ну или я что-то не так сделал.
0
|
|
|
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
|
||
| 13.03.2017, 18:27 [ТС] | ||
|
0
|
||
|
|
|
| 13.03.2017, 20:38 | |
|
Забавно... В том-то и дело что окно в "состоянии" будто ничего не происходило.
Но зато срабатывает ваша CrossWindow()! Видимо все окна правда просто перекрываются... Правда не самим десктопом... ...а той штукой с иконками рабочего стола... как там её... А у меня задача как раз как отловить! Была когда-то. Я тогда корячился-корячился и плюнул, но теперь раз уж начали изучать хорошо бы разобраться.
0
|
|
|
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
|
||
| 13.03.2017, 21:51 [ТС] | ||
|
0
|
||
|
|
|
| 13.03.2017, 22:17 | |
|
Да, на некоторых версиях ОС делается так. Как раз например на XP такое наблюдаю.
А вот на семёрке нажимаю Win+D и:
#00010472 (при том что GetDesktopWindow выдаёт #00010010).Добавлено через 2 минуты И эффект такой любопытный - нажатие мышкой по обоям рабочего стола (между значков, или даже на значке) скрывает открытое нами окно.
0
|
|
| 13.03.2017, 22:17 | |
|
Помогаю со студенческими работами здесь
20
Как свернуть все активные окна, если сама программа в свернутом виде? После нажатия 'WIN+D' или "свернуть все окна" программа зависает Свернуть окна Заменить кнопки окна 'свернуть', 'закрыть' Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y
Z4Tv2zpXVVo
https:/ / github. com/ shumilovas/ med2. git
|
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа.
В качестве фильтра для отбора справочника служит группа номенклатуры.
Отбор по наименованию группы. . .
|
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
|
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс.
Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
|
|
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа.
В качестве фильтра для отбора служит значение перечислений.
/ / Событие "НачалоВыбора" реквизита на форме. . .
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|