Sto cercando di portare una finestra in primo piano. Sto usando questo codice. Ma non funziona. Qualcuno potrebbe aiutarmi?Come portare una finestra in primo piano usando C#?
ShowWindowAsync(wnd.hWnd, SW_SHOW);
SetForegroundWindow(wnd.hWnd);
// Code from Karl E. Peterson, www.mvps.org/vb/sample.htm
// Converted to Delphi by Ray Lischner
// Published in The Delphi Magazine 55, page 16
// Converted to C# by Kevin Gale
IntPtr foregroundWindow = GetForegroundWindow();
IntPtr Dummy = IntPtr.Zero;
uint foregroundThreadId = GetWindowThreadProcessId(foregroundWindow, Dummy);
uint thisThreadId = GetWindowThreadProcessId(wnd.hWnd, Dummy);
if (AttachThreadInput(thisThreadId, foregroundThreadId, true))
{
BringWindowToTop(wnd.hWnd); // IE 5.5 related hack
SetForegroundWindow(wnd.hWnd);
AttachThreadInput(thisThreadId, foregroundThreadId, false);
}
if (GetForegroundWindow() != wnd.hWnd)
{
// Code by Daniel P. Stasinski
// Converted to C# by Kevin Gale
IntPtr Timeout = IntPtr.Zero;
SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, Timeout, 0);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, Dummy, SPIF_SENDCHANGE);
BringWindowToTop(wnd.hWnd); // IE 5.5 related hack
SetForegroundWindow(wnd.hWnd);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, Timeout, SPIF_SENDCHANGE);
}
Codice Explained
Fare una finestra la finestra in primo piano richiede più di una semplice chiamare l'API SetForegroundWindow. È necessario per prima cosa determinare il thread in primo piano e collegarlo alla finestra utilizzando AttachThreadInput, quindi chiamare SetForegroundWindow. In questo modo possono condividere gli stati di input.
Prima chiamo GetForegroundWindow a ottenere l'handle della finestra di primo piano corrente. Quindi alcune chiamate a GetWindowThreadProcessId recuperano i thread associati alla finestra di primo piano corrente e la finestra I desidera portare in primo piano. Se questi thread sono uguali una semplice chiamata a SetForegroundWindow è tutto che è necessario. In caso contrario, il thread in primo piano è collegato alla finestra che sto portando in primo piano e scollegato da quella che era la finestra in primo piano in primo piano. L'API AttachThreadInput gestisce questo.
Contenuto prelevato da here Grazie.
Codice malvagio, con la votazione di chiusura. –
Non riesco a capire il codice. Ma penso che l'argomento non sarebbe chiuso. Sono in attesa di possibili soluzioni –
@Nikil, mayb basta mantenere il titolo e rimuovere (dimenticare) quel codice? –