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

本文关键字:窗口 设置 顶部 任何可 其他 程序 | 更新日期: 2023-09-27 18:37:19

需要什么才能抓住可见窗口的手柄并将其设置为保持在顶部?

例如,能够将其他应用程序(比方说记事本)的onTop属性设置为顶部。

有没有一种简单的方法可以用 Win 7 或 8 做到这一点? 如果可能的话,而不是真正寻找Windows API的低级技巧。

谢谢

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

您可以通过以下方式在给定窗口句柄的情况下使窗口最顶层:

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