Цитата:
Сообщение от Страдалецъ
Ну неужели так трудно в поисковике набрать? "Delphi свернуть все окна"
Сразу кучу решений получите.
|
Ну тут скорее вопрос о том, что эти окна потом надо обратно развернуть.
Недавно писал прогу для работы с окнами. Вот кусок кода, который получает все видимые окна и сохраняет информацию о них:
Код:
function AddWindow(AHandle : THandle; ListBox : LPARAM) : BOOL; stdcall;
var
FWndInfo : TWndInfo;
AText : String;
PText : Array [0..1023] Of Char;
begin
If (AHandle <> Application.Handle) And (AHandle <> Application.MainForm.Handle) And
(IsWindowVisible(AHandle)) And (GetWindow(AHandle, GW_OWNER) = 0) And (IsWindow(AHandle))
Then
Begin
FillChar(PText,Length(PText) * SizeOf(Char),#0);
GetWindowText(AHandle,@PText,1023);
AText := StrPas(PText);
If (AText <> '') And (AText <> 'Program Manager') Then
Begin
FWndInfo := TWndInfo.Create(AHandle,AText);
TListBox(ListBox).Items.AddObject(AText,FWndInfo);
End;
End;
Result := TRUE;
end;
{ TForm1 }
procedure TMainForm.GetWindowsList;
var
I : Integer;
begin
lbWindows.Items.BeginUpdate;
Try
// Clear
For I := 0 To lbWindows.Items.Count-1 Do lbWindows.Items.Objects[i].Free;
lbWindows.Items.Clear;
lbWindows.Sorted := False;
// Get new list
EnumWindows(@AddWindow,LPARAM(lbWindows));
If lbWindows.Items.Count > 0 Then lbWindows.ItemIndex := 0;
lbWindows.Sorted := FPreferences.SortOrder = soAlpha;
Finally
lbWindows.Items.EndUpdate;
End;
end;
И код класса для хранения информации о найденых окнах:
Код:
unit WndInfo;
interface
uses
Windows;
type
TWndInfo = class
private
FHandle : THandle;
FText : String;
FIcon : HICON;
FIsMinimized : Boolean;
protected
procedure GetWindowInfo;
public
constructor Create(AHandle : THandle; AText : String); virtual;
destructor Destroy; override;
procedure ActivateWindow;
procedure MinimizeWindow;
property Handle : THandle read FHandle;
property Text : String read FText;
property Icon : HICON read FIcon;
property IsMinimized : Boolean read FIsMinimized;
end;
implementation
{ TWndInfo }
procedure TWndInfo.ActivateWindow;
begin
If FHandle <> 0 Then
Begin
If IsIconic(FHandle) Then ShowWindow(FHandle,SW_RESTORE);
SetForegroundWindow(FHandle);
End;
end;
constructor TWndInfo.Create(AHandle: THandle; AText : String);
begin
inherited Create;
FIcon := 0;
FIsMinimized := False;
FHandle := AHandle;
FText := AText;
GetWindowInfo;
end;
destructor TWndInfo.Destroy;
begin
inherited;
end;
procedure TWndInfo.GetWindowInfo;
const
WM_GETICON = $007F;
var
IconHandle : HICON;
begin
// Get window state
Try
FIsMinimized := IsIconic(FHandle);
Except
End;
// Get icon handle
Try
IconHandle := SendMessage(FHandle, WM_GETICON, ICON_SMALL2, 0);
If IconHandle = 0 Then IconHandle := GetClassLong(FHandle,GCL_HICONSM);
If IconHandle <> 0 Then FIcon := IconHandle;
Except
End;
end;
procedure TWndInfo.MinimizeWindow;
begin
ShowWindow(FHandle,SW_MINIMIZE);
FIsMinimized := True;
end;
end.