2014-11-21 6 views
0

윈도우 핸들 목록을 취하여 가장 높은 z 인덱스를 가진 윈도우 핸들을 리턴하는 메소드를 작성하려고합니다. 그러나 헛된. 아무도 내게 그걸하는 방법을 제안 할 수 있습니까?맨 위 윈도우의 핸들 얻기 (Z 인덱스로 윈도우 정렬)

+0

합니다. 임의로 목록에서 첫 번째 창을 가져 와서 GetWindow()를 호출하고 GHWND_PREV를 전달합니다. 목록에 있는지 확인하십시오. GetWindow()가 null을 반환 할 때까지 반복합니다. –

답변

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 감사합니다. –