(* Hачало (MINIMIZE.DPR) *){$APPTYPE CONSOLE}program Minimize;
uses Windows, Messages;
var
Count: integer;
function EnumProc(WinHandle: HWnd; Param: LongInt): Boolean; stdcall;
beginif (GetParent(WinHandle) = 0) and (not IsIconic(WinHandle)) and
(IsWindowVisible(WinHandle)) thenbegin
PostMessage(WinHandle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
Inc(Count);
end;
EnumProc := TRUE;
end;
begin
Count := 0;
EnumWindows(@EnumProc, 0);
Writeln('Minimized:', Count, ' windows');
end.
(* конец (MINIMIZE.DPR) *)
Программа на Delphi, использующая Windows API для минимизации всех не-иконических и видимых окон.
Рассмотрим, как она работает:
Функция EnumProc вызывается для каждого окна в системе. Эта функция проверяет, является ли окно не-иконическим, видимым и не имеет родительского окна (т.е., оно не вложено в другое окно). Если все эти условия истинны, она отправляет сообщение WM_ SYSCOMMAND окну с командой SC_MINIMIZE. Это минимирует окно.
Функция EnumWindows используется для перечисления всех окон в системе. Она вызывает функцию EnumProc для каждого окна и передает handle окна и параметр (в этом случае, 0).
После перечисления всех окон, программа пишет количество минимируемых окон в консоль.
Чтобы минимируть все запущенные окна, можно запустить эту программу. Однако помните, что это минимирует все видимые и не-иконические окна, включая некоторые системные окна иpossibly важные приложения.
Некоторые предложения по улучшению:
Добавьте обработку ошибок: программа не обрабатывает потенциальные ошибки, которые могут возникнуть во время перечисления или манипуляции окнами.
Используйте более конкретное название: вместо использования общего имени "Minimize", рассмотрите дать вашей программе более описательное имя, например, "Minimize All Visible Windows".
Добавьте опцию исключения определенных окон: вы могли бы добавить опции для исключения определенных типов окон (например, системных окон, окон обозревателя) или конкретных заголовков окон.
Рассмотрите более элегантный подход: вместо отправки сообщения WM_ SYSCOMMAND, вы могли бы использовать функцию ShowWindow с аクションом SW_MINIMIZE.
Вот обновленная версия программы, которая включает некоторые из этих предложений:
programMinimizeVisibleWindows;usesWindows,Messages;varCount:integer;ExcludeSystemWindows:boolean=true;// exclude system windows?functionEnumProc(WinHandle:HWnd;Param:LongInt):Boolean;stdcall;beginif(GetParent(WinHandle)=0)and(notIsIconic(WinHandle))and(IsWindowVisible(WinHandle))thenbeginifExcludeSystemWindowsandIsWindowSystem(WinHandle)thenExit;// skip system windowsPostMessage(WinHandle,WM_SYSCOMMAND,SC_MINIMIZE,0);Inc(Count);end;EnumProc:=TRUE;end;beginCount:=0;ExcludeSystemWindows:=true;// default is to exclude system windowsWriteLn('Minimized:',Count,' windows');// allow user to change the optionReadLn('Exclude system windows? (y/n): ',Answer);ifUpperCase(Answer)='Y'thenExcludeSystemWindows:=trueelseExcludeSystemWindows:=false;EnumWindows(@EnumProc,0);end.
Обновленная программа включает опцию исключения системных окон и использует более описательное имя. Вы можете модифицировать ее further для своих нужд.
В статье описывается программный способ минимизации всех запущенных окон на компьютере с помощью языка Delphi и функции EnumWindows.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.