2009-10-06 102 views
16

使用Process类启动应用程序后,我想将该窗口置于最上方。目前,我的应用程序是最顶层的窗口,所以当我启动其他应用程序时,它不会显示。我想到的一件事是,在启动流程之前,我可以为我的应用程序设置最顶层= false,这个问题是我想让流程在显示给用户之前有足够的时间加载,所以我想当我将其他应用程序切换到最顶层时,可以进行更多的控制。使用窗口句柄制作窗口最顶层

回答

48

您需要使用P/Invoke with SetWindowPos到accopmlish此:

[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

谢谢你提供的,应该做的伎俩! user32在64位系统上也有效吗? – 2009-10-07 00:12:21

+0

是的。它也可以在64位系统上运行。 – 2009-10-07 00:35:46