2014-11-21 129 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