Hogyan készítsünk egy alkalmazás aktív!

Hogyan készítsünk egy olyan alkalmazás, aktív az ő ablak tetején a másik, ha fut, mint ez:

Palacsinta megpróbálta a legkülönfélébb módokon:

PostMessage (fogantyú, WM_ACTIVATE, 0, 0);
SendMessage (fogantyú, WM_ACTIVATE, WA_CLICKACTIVE, 0);
BringWindowToTop (fogantyú);

Itt egy másik üzenetet a lehetőség WM_ACTIVATEAPP tartalmaz hThread is használja, mint?

Vagy hogyan lehet megvalósítani egy ilyen lehetőség?
Timer program aktívvá válik, azaz A program ablak tetején az összes ablak és volt a hangsúly.

Itt vagyok találtam egy ilyen lehetőség

Úgy működik - de nem tetszik, hogy az ablak első minimalizálható.

Van valakinek bármilyen további változatok.

> Hogyan alkalmazás előtérbe?
ha GetActiveWindow<>Egyes HWND majd SetActiveWindow (néhány HWND);

2 GanibalLector # XA0; [4]
Rossz, bocs

Ebben:

var QQ: HWND;
kezdődik
QQ: = findwindow ( "SciCalc", nulla);
ha GetForegroundWindow<>QQ majd SetForegroundWindow (QQ);
végén;

Itt van egy lista a funkciók és az üzenetek amit használtam semmi sem segített.
A legjobb, a villogó ablak címét, és minden.

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

Csak akkor működik:
Application.Minimize;
Application.Restore;
Application.BringToFront;

Niuzhele nincs mód.

Ez csak akkor működik,
Nem hiszem el.
Ön [6] megpróbálta.

segíthet ez pontosan

# XA0; # XA0; ha nem, akkor Eredmény
# XA0; # XA0; kezdődik
# XA0; # XA0; # XA0; // Kód: 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 kapcsolatos hack
# XA0; # XA0; # XA0; SetForegroundWindow (hwnd);
# XA0; # XA0; # XA0; SystemParametersInfo (SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject (timeout), SPIF_SENDCHANGE);
# XA0; # XA0; végén;
# XA0; vég
# XA0; más
# XA0; kezdődik
# XA0; # XA0; BringWindowToTop (hwnd); // IE 5.5 kapcsolatos hack
# XA0; # XA0; SetForegroundWindow (hwnd);
# XA0; végén;

# XA0; Eredmény: = (GetForegroundWindow = hwnd);
végén;
végén;
// -----------------------------------------
eljárás TForm1.Timer1Timer (Sender: TObject);
kezdődik
# XA0; ForceForegroundWindow (Application.Handle);
végén;

VÉGRE működik.
Köszönöm szépen DDA.

A lényege a program Következő:
A programok futtatásához ellenőrzi önmagát jelenlétében memóriát, ha van is működnek, ha van egy üzenet, amely továbbítja az első program, amely kialakulni és aktívvá válik, és a második példányt a kijárat.

Köszönet újra.

Kapcsolódó cikkek