2014-11-21 190 views
0

我想写一个方法,它需要窗口句柄列表并返回具有最高z指数的窗口的句柄等。但徒劳无益。有人可以给我一个建议如何做到这一点?获取顶部窗口句柄(按Z索引排序窗口)

+0

很模糊。任意地,取出列表中的第一个窗口并调用GetWindow(),传递GHWND_PREV。检查它是否在列表中。重复,直到GetWindow()返回null。 – 2014-11-21 17:39:15

回答

1

我会帮你出:

[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; 
} 
+0

谢谢贾森。这对我来说很有用。最近我注意到,通过调用EnumWindows()获得的窗口句柄已经按该顺序排序:D无论如何感谢。 – 2014-11-22 09:03:26