2009-10-06 7 views
16

Po uruchomieniu aplikacji korzystającej z klasy Proces chciałbym uczynić to okno najwyższym. Obecnie moja aplikacja to najwyższe okno, więc po uruchomieniu drugiej aplikacji nie wyświetla się. Jedna rzecz, która przyszła mi do głowy, to to, że mogłem ustawić topmost = false dla mojej aplikacji przed uruchomieniem procesu, problemem jest to, że chcę dać procesowi wystarczający czas na załadowanie przed wyświetleniem go użytkownikowi, więc chciałbym większą kontrolę nad przełączaniem drugiej aplikacji na najwyższą.Ustaw okno najwyżej przy użyciu klamki okiennej

Odpowiedz

48

Trzeba użyć P/Invoke with SetWindowPos do accopmlish to:

[DllImport("user32.dll")] 
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags); 

static readonly IntPtr HWND_TOPMOST = new IntPtr(-1); 
const UInt32 SWP_NOSIZE = 0x0001; 
const UInt32 SWP_NOMOVE = 0x0002; 
const UInt32 SWP_SHOWWINDOW = 0x0040; 

// Call this way: 
SetWindowPos(theWindowHandle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); 
+0

Dzięki za to, powinno wystarczyć! Czy user32 jest również poprawny w 64-bitowych systemach? –

+0

Tak. Będzie działać również na systemach 64-bitowych. –

Powiązane problemy