Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 确定窗口是否位于最上面_C#_Pinvoke - Fatal编程技术网

C# 确定窗口是否位于最上面

C# 确定窗口是否位于最上面,c#,pinvoke,C#,Pinvoke,我可以将windows位置设置为最顶部,也可以将其设置为无最顶部。但我不知道如何检查窗户是否在最上面。有什么方法可以用pinvoke检查窗口是否在最上面 根据您使用的UI技术,您可以选择以下两种: Windows窗体: WPF: 您可以使用这些属性来检查某个窗口是否为最顶部,也可以使用这些属性来设置最顶部的窗口。我更喜欢这些方法,而不是任何win32方法。您可以使用该函数检查 未经测试,但我相信它应该有效: [DllImport("user32.dll", SetLastError=true)]

我可以将windows位置设置为最顶部,也可以将其设置为无最顶部。但我不知道如何检查窗户是否在最上面。有什么方法可以用pinvoke检查窗口是否在最上面

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

Windows窗体: WPF: 您可以使用这些属性来检查某个窗口是否为最顶部,也可以使用这些属性来设置最顶部的窗口。我更喜欢这些方法,而不是任何win32方法。

您可以使用该函数检查

未经测试,但我相信它应该有效:

[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了,就像你说的。微软把我们弄糊涂了@背:没问题,很高兴我能帮忙!