2010-01-31 64 views
0

如何收集C#中的所有窗口處理程序。 我需要所有的窗口(不只是父母) 謝謝,收集所有窗口處理程序

+0

請問您能詳細說明一下這種情況,您到底在找什麼? – 2010-01-31 14:39:26

+0

一般來說,我有一個窗口處理程序,我想檢查它是否有阻塞對話框,所以我正在尋找一個窗口,我的窗口是父窗口,並具有WS_EX_DLGMODALFRAME樣式。 – Guy 2010-01-31 15:22:35

回答

3

請嘗試以下工具類。給定一個窗口句柄,它將返回所有關聯的子窗口。

public class WindowFinder 
{ 
    private class Helper 
    { 

     internal List<IntPtr> Windows = new List<IntPtr>(); 

     internal bool ProcessWindow(IntPtr handle, IntPtr parameter) 
     { 
      Windows.Add(handle); 
      return true; 
     } 
    } 

    private delegate bool EnumWindowProc(IntPtr hWnd, IntPtr parameter); 

    [DllImport("user32.dll")] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    private static extern bool EnumChildWindows(IntPtr hwndParent, EnumWindowProc lpEnumFunc, IntPtr lParam); 

    public static List<IntPtr> GetChildWindows(IntPtr parentWindow) 
    { 
     var helper = new Helper(); 
     EnumChildWindows(parentWindow, helper.ProcessWindow, IntPtr.Zero); 
     return helper.Windows; 
    } 
} 
相關問題