Почему EnumChildWindows пропускает дочерние элементы?

У меня странное поведение, когда дело доходит до использования метода Windows API EnumChildWindows. Вроде не забирает секцию детских окон. Когда я углубляюсь в детали с помощью Spy ++, я вижу детей, но когда я выполняю свой код, он не возвращает тех, которые я вижу в Spy ++.

Что я вижу в Spy ++ Что я вижу в Spy ++ http://img24.imageshack.us/img24/9264/spyhandles.png

Вот мой код:

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

    [DllImport("user32")]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool EnumChildWindows(IntPtr window, EnumWindowProc callback, IntPtr i);

    public static List GetChildWindows(IntPtr parent)
    {
        List result = new List();
        GCHandle listHandle = GCHandle.Alloc(result);
        try
        {
            EnumWindowProc childProc = new EnumWindowProc(EnumWindow);
            EnumChildWindows(parent, childProc, GCHandle.ToIntPtr(listHandle));
        }
        finally
        {
            if (listHandle.IsAllocated)
                listHandle.Free();
        }
        return result;
    }

    private static bool EnumWindow(IntPtr handle, IntPtr pointer)
    {
        GCHandle gch = GCHandle.FromIntPtr(pointer);
        List list = gch.Target as List;
        if (list == null)
            throw new InvalidCastException("GCHandle Target could not be cast as List");

        list.Add(handle);            
        return true;
    }

Есть ли причина, почему выделенная красная секция на скриншоте выше не будет заполнено в моей коллекции ( List ) при вызове EnumChildWindows?

10
задан Dekryptid 10 August 2011 в 18:02
поделиться