У меня странное поведение, когда дело доходит до использования метода 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?