powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как отследить минимизация форма по Win+D?
11 сообщений из 11, страница 1 из 1
Как отследить минимизация форма по Win+D?
    #40057434
crossa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Написал процедуру для выполнения действий при минимизации главной формы (свернуть программу в трей, обновить контекстное меню иконки в трее и т.д.).

Код: pascal
1.
2.
3.
4.
5.
6.
procedure TForm1.ApplicationMinimize(Sender: TObject);
begin
end;

Application.MainFormOnTaskbar:=True;
Application.OnMinimize:=ApplicationMinimize;


Всё прекрасно работает, но не для волшебной комбинации клавиш Win + D ("Показать рабочий стол"). Эта системная комбинация клавиш сворачивает все открытые окна без вызова Application.OnMinimize. Моя программа минимизируется, но заданные действия не выполняются.

Вопрос: как отследить минимизацию программы по нажатию Win + D?
...
Рейтинг: 0 / 0
Как отследить минимизация форма по Win+D?
    #40057524
Benten
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Вопрос понятен, но боюсь, что это не так просто сделать.
Я попытался найти решение, но слету не получилось.
Понял, что копать надо в сторону хуки, потому что при нажатии кнопки "Свернуть все окна" или Win-D система генерирует специальное событие тулбару.
Можете это проверить простым кодом:
Код: pascal
1.
2.
3.
4.
var wnd: HWND;
wnd = FindWindow('Shell_TrayWnd', 0);    
if (wnd <> 0)  then
  SendMessage(wnd, WM_COMMAND, 0x019f, 0);  //Свернуть все окна Windows


Информацию получал отсюда и отсюда

Возможно есть решение проще, буду признателен, если кто-то из гуру подскажет и(или) направит в нужную сторону
...
Рейтинг: 0 / 0
Как отследить минимизация форма по Win+D?
    #40057544
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Benten,

Используйте утилиту Microsoft Spy++ для отслеживания сообщений, которые получает ваше окно при сворачивании таким способом.
...
Рейтинг: 0 / 0
Как отследить минимизация форма по Win+D?
    #40057550
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как отследить минимизация форма по Win+D?
    #40057553
Benten
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cobalt747
Используйте утилиту Microsoft Spy++ для отслеживания сообщений, которые получает ваше окно при сворачивании таким способом.

Спасибо, использую Spy++, но пока не могу отловить никаких сообщений моему приложению при нажатии <Win+D>
...
Рейтинг: 0 / 0
Как отследить минимизация форма по Win+D?
    #40057561
crossa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы. Решение отыскал на этом форуме, в других темах. Худо-бедно, оно работает: надо отлавливать событие WM_SIZE.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
procedure WMSize(var Msg: TMessage); message WM_SIZE;

procedure TForm1.WMSize(var Msg: TMessage);
begin
     inherited;
     if WindowState=wsMinimized then
     // perform actions
end;


Тут главное позаботиться о том, чтобы при минимизации приложения заданные действия выполнялись только один раз, так как при обычном сворачивании окна после TForm1.WMSize будет также выполнен TForm1.ApplicationMinimize.
...
Рейтинг: 0 / 0
Как отследить минимизация форма по Win+D?
    #40057572
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crossaХудо-бедно, оно работает: надо отлавливать событие WM_SIZE.

Может, WM_WINDOWPOSCHANGED, упомянутый по ссылке выше, получше будет? Там можно явно
отследить скрытие окна по флагу, без эвристик.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как отследить минимизация форма по Win+D?
    #40057575
Benten
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

crossaХудо-бедно, оно работает: надо отлавливать событие WM_SIZE.

Может, WM_WINDOWPOSCHANGED, упомянутый по ссылке выше, получше будет? Там можно явно
отследить скрытие окна по флагу, без эвристик.

Отслеживание события WM_SIZE работает очень хорошо и не дает ложных срабатываний
WM_WINDOWPOSCHANGED срабатывает слишком часто, его лучше не использовать
...
Рейтинг: 0 / 0
Как отследить минимизация форма по Win+D?
    #40057577
Benten
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crossa
Тут главное позаботиться о том, чтобы при минимизации приложения заданные действия выполнялись только один раз, так как при обычном сворачивании окна после TForm1.WMSize будет также выполнен TForm1.ApplicationMinimize.
Не надо заботиться, просто уберите обработчик TForm1.ApplicationMinimize и все делайте в одном месте, в обработчике TForm1.WM_Size
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
unit TestHookMessages;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls,  System.TypInfo;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Memo1: TMemo;
    procedure WM_Size(var Msg:tagMSG); message WM_SIZE;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WM_Size(var Msg: tagMSG);
begin
  inherited;
  case Form1.WindowState of
    wsNormal, wsMaximized:
      Memo1.Lines.Add('Окно приложения на рабочем столе');
    else
      Memo1.Lines.Add('Окно приложения свернуто!');
  end;
end;

end.
...
Рейтинг: 0 / 0
Как отследить минимизация форма по Win+D?
    #40057579
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BentenОтслеживание события WM_SIZE работает очень хорошо и не дает ложных срабатываний
WM_WINDOWPOSCHANGED срабатывает слишком часто, его лучше не использовать

А ничего, что первое порождается вторым?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как отследить минимизация форма по Win+D?
    #40057582
Benten
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
BentenОтслеживание события WM_SIZE работает очень хорошо и не дает ложных срабатываний
WM_WINDOWPOSCHANGED срабатывает слишком часто, его лучше не использовать
А ничего, что первое порождается вторым?..
В принципе, это уже не важно. Главное, что решение найдено.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как отследить минимизация форма по Win+D?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]