确定一个窗口是否是最顶层的或者不是

6

我可以使用SetWindowPos函数将窗口置于最顶层或取消其置于最顶层。但是,我无法找到检查窗口是否置于最顶层的方法。是否有通过来检查窗口是否置于最顶层的方法?

2个回答

8
您可以使用GetWindowLong()函数来检查扩展窗口样式。以下为可能可行的代码示例:
[DllImport("user32.dll", SetLastError=true)]
static extern int GetWindowLong(IntPtr hWnd, int nIndex);

const int GWL_EXSTYLE = -20;
const int WS_EX_TOPMOST = 0x0008;

public static bool IsWindowTopMost(IntPtr hWnd)
{
    int exStyle = GetWindowLong(hWnd, GWL_EXSTYLE);
    return (exStyle & WS_EX_TOPMOST) == WS_EX_TOPMOST;
}

我认为你只需要将exStyle的类型更改为int,ES_EX_TOPMOST也是如此。 - Backs
@Backs:为什么?在C++中它是一个DWORD,对应于UInt32。所以这是正确的。编辑:哦等等,GetWindowLong()声明。好吧,我不确定该使用哪个了。 - Visual Vincent
使用WS_EX_TOPMOST是正确的,但如果我使用uint,则会返回错误,提示我需要从int转换为uint进行强制转换。 - Backs
1
@Backs:已修复。函数声明应为“int”,但在C++中,标志的类型为“DWORD”(“uint”)。我现在已经按照你说的将所有内容都改成了“int”。微软让我们感到困惑。;) - Visual Vincent
1
@Backs:没问题,很高兴能帮到你! - Visual Vincent
显示剩余4条评论

-1

根据您使用的UI技术,您可以选择以下两种:

  • Windows Forms:{{link1:Form.TopMost}}
  • WPF:{{link2:Window.TopMost}}

您可以使用这些属性来检查某个窗口是否置顶,并且您还可以使用这些属性将窗口设置为置顶。我更喜欢这些方法而不是任何win32方法。


1
这仅适用于他自己应用程序中的任何窗口。我敢打赌他正在使用WinAPI函数来修改外部应用程序的窗口,否则使用它们将是不必要的工作。 :) - Visual Vincent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接