1

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

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

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

谢谢

4

2 回答 2

2

您可以通过以下方式在给定窗口句柄的情况下将窗口设为 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);
于 2012-06-16T01:20:08.407 回答
0

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

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

于 2015-01-30T03:34:28.037 回答