1

Я использую WinDirStat для сканирования моего диска D: его окно немного медленное и не отвечает. Я свернул уже развернутое окно. Через некоторое время я хочу проверить прогресс и нажимаю кнопку панели задач WinDirStat. Поскольку он не может реагировать мгновенно, я быстро нажимаю кнопку несколько раз (что может стать двойным щелчком). Наконец, окно показывает, но автоматически восстанавливает его максимальный размер.

Смотрите скриншот: развернутое окно Сверните его и дважды щелкните кнопку панели задач (выделенный «81% D: - WinDirStat» перед значком "CH"), чтобы он стал: не развернутое окно

Это также происходит с другими приложениями, такими как Firefox, Visual Studio и даже Word, когда они не отвечают. Частое использование не развернутого Firefox особенно раздражает. Я просто замаскировал имена файлов на 2 снимках экрана в Photoshop и несколько раз щелкнул по кнопке на панели задач при запуске. Затем я ясно увидел, что сначала он был максимизирован, а в следующий раз стал не максимизирован.

Когда приложения не заняты, у них нет проблемы. Первый щелчок по кнопке панели задач свернутого окна вызывает его, и если это двойной щелчок, второй щелчок игнорируется. Окно не восстановит свой размер.

Почему занятое окно может волшебным образом стать не максимизированным? Как я могу отключить поведение?

1 ответ1

0

Теперь я думаю, что выяснил причину, но я понятия не имею, как это исправить.

Для свернутого с развернутым окном (отзывчивое или нет), если я щелкну правой кнопкой мыши на кнопке панели задач и дважды выберу "Восстановить", окно сначала станет не минимизированным, а затем станет не развернутым. Это может быть то, что происходит в вопросе.

Если я щелкну левой кнопкой мыши на панели задач, Проводник проверит текущее состояние окна. Если он свернут, ему будет отправлено сообщение "Восстановить". Если он показывает, но в фоновом режиме, он будет отображен. Если он уже находится на переднем плане, он будет свернут.

Когда свернутое окно реагирует, нажатие кнопки панели задач вызывает его. Если я нажму еще раз, Explorer заметит, что окно уже находится на переднем плане, и снова свернет его.

Однако, когда окно не отвечает, оно не будет отвечать на сообщение "Восстановить" и застревает в свернутом состоянии. Если я дважды нажму кнопку панели задач, два сообщения "Восстановить" будут находиться в очереди, так как Explorer всегда видит окно как свернутое. Когда окно наконец становится живым, оно начинает обрабатывать ожидающие сообщения. Первый "Восстановить" возвращает окно вверх, а второй восстанавливает окно в не максимизированном состоянии.

Основная проблема заключается в том, что "Minimized" и "Maximized" должны быть двумя несвязанными свойствами окна, но Windows смешивает их и использует одно и то же "Restore"(SW_RESTORE) для их очистки.

Пока я не знаю ни одного решения, чтобы исправить поведение. Я пытался отслеживать эти "Восстановления" (глобально перехватывая API, такие как PostMessage и проверяя, если msg == WM_SYSCOMMAND), но безуспешно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .