如何设置其他程序的任何可见窗口在顶部?

抓住一个可见的窗口的句柄,并把它放在最上面,需要什么?

例如能够设置一些其他应用程序的onTop属性(比方说记事本)在最上面。

有没有一个简单的方法与Win 7或8做到这一点? 如果可能的话,并不真正在寻找低级别的诡计。

谢谢

你可以通过以下方式创建一个窗口最上面的窗口句柄:

[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); 

获取适当的窗口句柄的方法根据应用程序而有所不同。 您可能可以通过Process.MainWindowHandle获得它,但有时它需要在Windows API中使用EnumWindows ,如果它不是“主窗口”。

使用上面的记事本,例如,你可以这样做:

 var processes = Process.GetProcessesByName("notepad"); SetWindowPos(processes.First().MainWindowHandle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); 

HWND_TOPMOST会将窗口永久置于窗口(直到其他窗口被标记为最顶层),但是如果您希望窗口简单地弹出到前面,请尝试:

静态只读IntPtr HWND_TOP = new IntPtr(0);