C# 确定窗口是否位于最上面
我可以将windows位置设置为最顶部,也可以将其设置为无最顶部。但我不知道如何检查窗户是否在最上面。有什么方法可以用pinvoke检查窗口是否在最上面 根据您使用的UI技术,您可以选择以下两种: Windows窗体: WPF: 您可以使用这些属性来检查某个窗口是否为最顶部,也可以使用这些属性来设置最顶部的窗口。我更喜欢这些方法,而不是任何win32方法。您可以使用该函数检查 未经测试,但我相信它应该有效:C# 确定窗口是否位于最上面,c#,pinvoke,C#,Pinvoke,我可以将windows位置设置为最顶部,也可以将其设置为无最顶部。但我不知道如何检查窗户是否在最上面。有什么方法可以用pinvoke检查窗口是否在最上面 根据您使用的UI技术,您可以选择以下两种: Windows窗体: WPF: 您可以使用这些属性来检查某个窗口是否为最顶部,也可以使用这些属性来设置最顶部的窗口。我更喜欢这些方法,而不是任何win32方法。您可以使用该函数检查 未经测试,但我相信它应该有效: [DllImport("user32.dll", SetLastError=true)]
[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;
}
这只适用于他自己应用程序中的任何窗口。我打赌他正在使用WinAPI函数来修改外部应用程序的窗口,否则使用它们将是不必要的工作我只认为您需要将exStyle的类型更改为int,并将ES_EX的类型更改为int_TOPMOST@Backs:为什么?它是C++中的一个DWORD,它转换为UIT32。所以这是正确的。编辑:哦,等等,GetWindowLong声明。好的,我不确定再使用哪个。使用WS_EX_TOPMOST你是正确的,但是如果我使用uint,它会返回一个错误,即我缺少从int到uint@Backs:固定。函数声明应该是int,但是在C++中,标志是dWord uint类型。我现在把一切都改成int了,就像你说的。微软把我们弄糊涂了@背:没问题,很高兴我能帮忙!