2010-01-31 11 views
0

Comment collecter tous les gestionnaires de fenêtres en C#. J'ai besoin de toutes les fenêtres (pas seulement les parents) Merci,Récupérer tous les gestionnaires de fenêtres

+0

Pouvez-vous élaborer le scénario, qu'est-ce que vous cherchez exactement? –

+0

En général, j'ai un gestionnaire de fenêtre et je voudrais vérifier s'il a un dialogue de blocage, donc je cherche une fenêtre que ma fenêtre est le parent, et a le style WS_EX_DLGMODALFRAME. – Guy

Répondre

3

Essayez la classe d'utilitaires suivante. Étant donné un handle à une fenêtre, il retournera toutes les fenêtres enfants associées.

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; 
    } 
}