pinvoke
pinvoke copied to clipboard
User32 EnumChildWindows
Thank you for your efforts!
The ability to enumerate the child windows that belong to the specified parent window is missing
documentation: https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-enumchildwindows
example:
private delegate bool EnumWindowProc(IntPtr hWnd, IntPtr lParam);
[DllImport("user32")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool EnumChildWindows(IntPtr window, EnumWindowProc callback, IntPtr lParam);
public IReadOnlyList<IntPtr> GetChildHandles(IntPtr parentHandle)
{
var childHandles = new List<IntPtr>();
var gcChildHandlesList = GCHandle.Alloc(childHandles);
var pointerChildHandlesList = GCHandle.ToIntPtr(gcChildHandlesList);
try
{
var childProc = new EnumWindowProc(EnumWindow);
EnumChildWindows(parentHandle, childProc, pointerChildHandlesList);
}
finally
{
gcChildHandlesList.Free();
}
return childHandles.AsReadOnly();
}
private static bool EnumWindow(IntPtr hWnd, IntPtr lParam)
{
var gcChildHandlesList = GCHandle.FromIntPtr(lParam);
if (gcChildHandlesList.Target is List<IntPtr> childHandles)
{
childHandles.Add(hWnd);
return true;
}
return false;
}