抓住一个可见的窗口的句柄,并把它放在最上面,需要什么?
例如能够设置一些其他应用程序的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);