0
我想写一个方法,它需要窗口句柄列表并返回具有最高z指数的窗口的句柄等。但徒劳无益。有人可以给我一个建议如何做到这一点?获取顶部窗口句柄(按Z索引排序窗口)
我想写一个方法,它需要窗口句柄列表并返回具有最高z指数的窗口的句柄等。但徒劳无益。有人可以给我一个建议如何做到这一点?获取顶部窗口句柄(按Z索引排序窗口)
我会帮你出:
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr GetWindow(IntPtr hWnd, GetWindow_Cmd uCmd);
enum GetWindow_Cmd : uint
{
GW_HWNDFIRST = 0,
GW_HWNDLAST = 1,
GW_HWNDNEXT = 2,
GW_HWNDPREV = 3,
GW_OWNER = 4,
GW_CHILD = 5,
GW_ENABLEDPOPUP = 6
}
private IntPtr GetTopmostHwnd(List<IntPtr> hwnds)
{
var topmostHwnd = IntPtr.Zero;
if (hwnds != null && hwnds.Count > 0)
{
var hwnd = hwnds[0];
while (hwnd != IntPtr.Zero)
{
if (hwnds.Contains(hwnd))
{
topmostHwnd = hwnd;
}
hwnd = GetWindow(hwnd, GetWindow_Cmd.GW_HWNDPREV);
}
}
return topmostHwnd;
}
谢谢贾森。这对我来说很有用。最近我注意到,通过调用EnumWindows()获得的窗口句柄已经按该顺序排序:D无论如何感谢。 – 2014-11-22 09:03:26
很模糊。任意地,取出列表中的第一个窗口并调用GetWindow(),传递GHWND_PREV。检查它是否在列表中。重复,直到GetWindow()返回null。 – 2014-11-21 17:39:15