需要什么来抓住可见窗口的句柄并将其设置为保持在顶部?
例如,能够将其他一些应用程序(比如记事本)的 onTop 属性设置在顶部。
有没有一种简单的方法可以用 Win 7 或 8 做到这一点?如果可能的话,并不是真的在寻找 Windows API 的低级技巧。
谢谢
您可以通过以下方式在给定窗口句柄的情况下将窗口设为 Topmost:
[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.MainWindowHandleEnumWindows
获得它,但有时如果它不是“主窗口” ,它需要在 Windows API 中使用。
例如,对于记事本,使用上述内容,您可以执行以下操作:
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);