Як зробити додаток активним!

Як зробити додаток активним тобто щоб його вікно було поверх всіх інших якщо запустити його так:

Блін пробував різними способами:

PostMessage (Handle, WM_ACTIVATE, 0, 0);
SendMessage (Handle, WM_ACTIVATE, WA_CLICKACTIVE, 0);
BringWindowToTop (Handle);

ось ще одне повідомлення WM_ACTIVATEAPP в її параметр входить hThread може за допомогою його як?

Ну або як реалізувати такий варіант?
Програма по таймеру повинна ставати активної тобто щоб вікно програми було поверх всіх вікон і мала фокус.

Ось знайшов такий варіант

працює - але не влаштовує те що вікно спочатку згортається.

Є у кого ще якісь версії.

> Як зробити додаток активним?
if GetActiveWindow<>деякий HWND then SetActiveWindow (деякий HWND);

2 GanibalLector # XA0; [4]
Помилився, пардон

Во, так:

var QQ: HWND;
begin
QQ: = findwindow ( "SciCalc", nil);
if GetForegroundWindow<>QQ then SetForegroundWindow (QQ);
end;

Ось список функцій і повідомлень які я застосовував нічого не допомогло.
У кращому випадку блимав заголовок вікна і все.

si.wShowWindow: = sw_show;
PostMessage (Handle, WM_SYSCOMMAND, SC_restore, 0);
BringWindowToTop (Handle);
si.dwFlags: = STARTF_RUNFULLSCREEN;
si.wShowWindow: = 4;
ARC30.Enabled: = true;
FlashWindow (Handle, true);
Showwindow (Handle, sw_show);
SetWindowPos (Handle, HWND_BOTTOM, 1,1,200,200, SWP_SHOWWINDOW);
PostMessage (Handle, WM_ACTIVATE, 0, 0);
ShowWindow (Handle, SW_RESTORE);
SendMessage (Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
SendMessage (Handle, WM_ACTIVATE, WA_CLICKACTIVE, 0);
BringWindowToTop (Handle);
SetForegroundWindow (.Handle);
SendMessage (Handle, WM_LButtonDown, 1,1);
SendMessage (Handle, WM_LButtonUP, 1,1);
SendMessage (Handle, WM_ACTIVATEAPP, 0, 0);
SetWindowPos (Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE + SWP_NOMOVE);

Працює тільки це:
Application.Minimize;
Application.Restore;
Application.BringToFront;

Ніужеле немає ніякого способу.

Працює тільки це
Не вірю.
Ви [6] пробували.

тобі допоможе ось це, точно

# XA0; # XA0; if not Result then
# XA0; # XA0; begin
# XA0; # XA0; # XA0; // Code by Daniel P. Stasinski
# XA0; # XA0; # XA0; SystemParametersInfo (SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @timeout, 0);
# XA0; # XA0; # XA0; SystemParametersInfo (SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject (0), SPIF_SENDCHANGE);
# XA0; # XA0; # XA0; BringWindowToTop (hwnd); // IE 5.5 related hack
# XA0; # XA0; # XA0; SetForegroundWindow (hWnd);
# XA0; # XA0; # XA0; SystemParametersInfo (SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject (timeout), SPIF_SENDCHANGE);
# XA0; # XA0; end;
# XA0; end
# XA0; else
# XA0; begin
# XA0; # XA0; BringWindowToTop (hwnd); // IE 5.5 related hack
# XA0; # XA0; SetForegroundWindow (hwnd);
# XA0; end;

# XA0; Result: = (GetForegroundWindow = hwnd);
end;
end;
// -----------------------------------------
procedure TForm1.Timer1Timer (Sender: TObject);
begin
# XA0; ForceForegroundWindow (Application.Handle);
end;

НАРЕШТІ працює.
Величезне спасибі тобі DDA.

Суть програми наступна:
Запускаю свою програму вона перевіряє себе на наявність в пам'яті якщо немає то залишається працювати, якщо є то передає повідомлення першій програмі яка повинна спливти і стати активною, а друга копія завершує свою роботу.

Ще раз виличезне Дякую.

Схожі статті