C# 在C中使用MainWindowHandle时,如何检查特殊的子窗口是否打开

C# 在C中使用MainWindowHandle时,如何检查特殊的子窗口是否打开,c#,winapi,childwindow,C#,Winapi,Childwindow,我想枚举和迭代UI自动化程序的子窗口。我的目标是通过列出所有窗口并检查标题来识别程序的特殊窗口是否打开 我使用以下代码获取主窗口的句柄,它工作正常: foreach (Process pList in Process.GetProcesses()) { listBox1.Items.Add(pList.MainWindowTitle); if (pList.MainWindowTitle.Contains("WindowNa

我想枚举和迭代UI自动化程序的子窗口。我的目标是通过列出所有窗口并检查标题来识别程序的特殊窗口是否打开

我使用以下代码获取主窗口的句柄,它工作正常:

         foreach (Process pList in Process.GetProcesses())
         {
         listBox1.Items.Add(pList.MainWindowTitle);
         if (pList.MainWindowTitle.Contains("WindowName") && IsWindowVisible(pList.MainWindowHandle.ToInt32()))
            {
            Console.WriteLine(pList.MainWindowHandle);
            }
         }
但是它只能识别主窗口,而不能识别该程序打开的其他窗口。 我已经尝试了一些我在谷歌上搜索过的代码,但仍然无法获得ChildWindow句柄/标题

例如:

    private void Form1_Load(object sender, EventArgs e)
    {
        Process[] processlist = Process.GetProcesses();

        foreach (Process process in processlist)
        {
            if (!String.IsNullOrEmpty(process.MainWindowTitle))
            {
                if (process.Id == 8532)//this is chrome id for example/
                {
                    Console.WriteLine("Process: {0} ID: {1} Window title: {2}", process.ProcessName, process.Id, process.MainWindowTitle);
                    List<Process> a = GetChild(process);
                    foreach (Process p in a)
                    {
                        Console.WriteLine("Process: {0} ID: {1} Window title: {2}", process.ProcessName, process.Id, process.MainWindowTitle);
                    }
                }
            }
        }
    }

    public static List<Process> GetChild(Process process)
    {
        List<Process> children = new List<Process>();
        ManagementObjectSearcher mos = new ManagementObjectSearcher(String.Format("Select * From Win32_Process Where ParentProcessID={0}", process.Id));

        foreach (ManagementObject mo in mos.Get())
        {
            children.Add(Process.GetProcessById(Convert.ToInt32(mo["ProcessID"])));
        }

        return children;
    }

但是我仍然不知道如何访问子窗口。

。在主窗口中枚举子窗口如何?尚未了解详细信息,但听起来可能:。但是,确定它是否打开可能很棘手..在主窗口中枚举子窗口如何?尚未了解详细信息,但听起来可能:。然而,确定它是否开放可能很棘手。