2009-10-06 14 views
16

Después de iniciar una aplicación usando la clase Process, me gustaría hacer que esa ventana sea la más alta. Actualmente, mi aplicación es la ventana más alta, así que cuando la lanzo, no aparece. Una cosa que me vino a la mente es que podría establecer topmost = false para mi aplicación antes de iniciar el proceso, el problema es que quiero darle al proceso suficiente tiempo para cargarlo antes de mostrarlo al usuario, así que me gustaría más control sobre cuándo cambio la otra aplicación a la más alta.Haz una ventana en la parte superior utilizando un controlador de ventana

Respuesta

48

Es necesario utilizar P/Invoke with SetWindowPos a accopmlish esto:

[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

Gracias por eso, debe hacer el truco! ¿Es user32 válido en sistemas de 64 bits también? –

+0

Sí. Funcionará en sistemas de 64 bits también. –

Cuestiones relacionadas