Вы должны использовать EnumChildWindows .
Это должно выглядеть примерно так:
Сначала создайте вспомогательный класс для WinApi:
class WindowManager
{
public delegate bool EnumWindowProc(IntPtr hwnd, IntPtr lParam);
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool EnumChildWindows(IntPtr window, EnumWindowProc callback, IntPtr lParam);
//this one would iterate through child windows of window
public static bool IterateChildWindows(IntPtr window, EnumWindowProc callback, IntPtr lParam)
{
return EnumChildWindows(window, callback, lParam);
}
}
Теперь вы можете вызывать IterateChildWindows. OnEnumWindow - это метод, который будет вызываться для каждого найденного окна. Обратите внимание, что окно также является кнопкой, текстовым полем и т. Д .:
WindowManager.IterateChildWindows(hwnd, OnEnumWindow, IntPtr.Zero);
bool OnEnumWindow(IntPtr foundWindow, IntPtr lParam)
{
//here you have to check if this window is a form or a control and then do your work
}