Як згорнути всі вікна

як згорнути всі вікна?

Добридень, шановні. Мета така: після натискання на кнопку згортаються всі (!) Вікна і через 4 секунди з'являється повідомлення з двома кнопками так / ні з якоюсь реакцією на "так" і "ні". Скажіть, будь ласка, як це здійснити в Delphi.
Сподіваюся на вашу допомогу. Дякуємо.

1. Шукаєш всі вікна
2. згортати їх
3. ставиш таймер на 4 сек.
4. після сраб. таймера виводиш кнопки так-ні
5. Не забудь повернути все назад, а то користувачі озвіріють;)

Або я щось не так зрозумів.

;-)
І все таки? Як же буде виглядати програмний код. -)
Please help.

2. Кожному вікна послати повідомлення PostMessage (Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
4. if MessageDlg ( "", mtcofimation, [mbyes, mbno], 0) = mryes then
.

якщо вікна свої, то через перебір форм Screen, згортання.
а якщо все, то ось приклад з.

Як згорнути всі вікна системи. (Як згорнути всі вікна системи крім вікна програми)

function EnumMiniProc (Wd: HWnd; Param: LongInt): Boolean; stdcall; // Обов'язково stdcall.
Begin
If Wd<>Form1.Handle then // якщо це не наша програма
If IsWindowVisible (WD) then // якщо вікно мабуть
If not IsIconic (WD) then // якщо вікно не згорнуто
If isWindow (WD) then // і взагалі це - вікно.
ShowWindow (WD, SW_MINIMIZE); // звернемо його.
EnumProc: = TRUE; // продовжуємо перебирати всі вікна системи.
end;

procedure TForm1.Button1Click (Sender. TObject); // допустимо, закриваємо після натискання на клавішу
begin
EnumWindows (@EnumMiniProc, 0); // відпрацьовуємо згортання вікон.
end;


Для того щоб вікно програми теж згорталося досить прибрати рядок If Wd<>Form1.Handle then в EnumMiniProc
Звичайно, можна поставити ще масу умов, за якими будуть мінімізуватися вікна, але це вже справа конкретного завдання.

procedure TForm1.Button1Click (Sender: TObject);
VAR
Wnd. hWnd;
buff: ARRAY [0..127] OF Char;
begin
Wnd: = GetWindow (Handle, gw_HWndFirst);
WHILE Wnd <> 0 DO
BEGIN
IF (Wnd <> Application.Handle) AND
(IsWindowVisible (Wnd)) THEN
BEGIN
GetWindowText (Wnd, buff, sizeof (buff));
ShowWindow (Wnd, SW_SHOWMINIMIZED);
END;
Wnd: = GetWindow (Wnd, gw_hWndNext);
END;
Timer1.Enabled: = True;
end;

Ну а далі я думаю не складно%)

GetWindowText (Wnd, buff, sizeof (buff));
Хіба цей рядок потрібна?


procedure MinimizeAll;
begin
keybd_event (VK_LWIN, MapVirtualKey (VK_LWIN, 0), 0, 0);
keybd_event (Ord ( "M"), MapVirtualKey (Ord ( "M"), 0), 0, 0);
keybd_event (Ord ( "M"), MapVirtualKey (Ord ( "M"), 0), KEYEVENTF_KEYUP, 0);
keybd_event (VK_LWIN, MapVirtualKey (VK_LWIN, 0), KEYEVENTF_KEYUP, 0);
end;

Цим зміниш всі вікна.

згоден з Kotka
рядки
buff: ARRAY [0..127] OF Char;
GetWindowText (Wnd, buff, sizeof (buff));
не потрібні
і як наслідок в коді ще два Бегіна треба прибрати

> If isWindow (WD) then // і взагалі це - вікно.

А що, хіба EnumWindows перераховує і неокна теж? Це новина.