0

我希望能够让我的应用程序始终处于领先地位。因此,当我打开一个新程序并且即使我将 this.TopLevel 值设置为 true 时它仍处于顶部,应用程序将看到它不再处于顶部,然后返回顶部。我知道我可以用计时器来做到这一点,但我希望他们是更好的方法。

4

2 回答 2

3

您可以使用位于 中的方法user32.dll

using System.Runtime.InteropServices;

您将需要这些变量:

private static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
private const UInt32 SWP_NOSIZE = 0x0001;
private const UInt32 SWP_NOMOVE = 0x0002;
private const UInt32 TOPMOST_FLAGS = SWP_NOMOVE | SWP_NOSIZE;

从 DLL 导入方法...

[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);

然后在您的代码中,使用它将窗口位置设置为最上面的窗口。

SetWindowPos(this.Handle, HWND_TOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS);

我希望这可以帮助你!

于 2017-07-13T18:31:11.220 回答
1

我建议您抓住新窗口的事件,并在新窗口打开后查看您是否处于领先地位:

https://stackoverflow.com/a/40698254/2557128

于 2017-07-13T18:15:46.073 回答