C# 如何使用WinApi获取嵌套子句柄并设置其值

C# 如何使用WinApi获取嵌套子句柄并设置其值,c#,.net,winapi,C#,.net,Winapi,我正在尝试设置以下两个句柄的文本和列表框选定值: 1) 从下面的第一张图片:句柄名称“选择数据库文件”父-编辑,文本框并设置它的属性。我可以获取父句柄,但无法获取子编辑(textbox)并设置其文本属性 //Getting Parent Handle IntPtr hwnd = (IntPtr)Win32.Functions.FindWindow(null, "Select Database File"); //Attempting to get child handle IntPtr h =

我正在尝试设置以下两个句柄的文本和列表框选定值:

1) 从下面的第一张图片:句柄名称“选择数据库文件”父-编辑,文本框并设置它的属性。我可以获取父句柄,但无法获取子编辑(textbox)并设置其文本属性

//Getting Parent Handle
IntPtr hwnd = (IntPtr)Win32.Functions.FindWindow(null, "Select Database File");

//Attempting to get child handle
IntPtr h =
        (IntPtr)Win32.Functions.FindWindowEx(hwnd, IntPtr.Zero, "Edit", null);
    if (h != IntPtr.Zero)
    {
        //setting text
                Win32.Functions.SetWindowText((IntPtr)h, "qwerty");
    }
下面是一个递归函数,在这里我传递父句柄,但它返回句柄值,而不是窗口/类名,在这里我可以编辑/转换所需的子句柄。 公共静态列表GetAllChildrenWindowHandles(IntPtr hParent, 整数(最大计数) {

            List<IntPtr> result = new List<IntPtr>();
            int ct = 0;
            IntPtr prevChild = IntPtr.Zero;
            IntPtr currChild = IntPtr.Zero;
            while (true && ct < maxCount)
            {
                currChild = (IntPtr)Win32.Functions.FindWindowEx(hParent, prevChild, null, null);
                if (currChild == IntPtr.Zero) break;
                result.Add(currChild);
                prevChild = currChild;
                ++ct;
            }
            return result;
        }
列表结果=新列表();
int-ct=0;
IntPtr prevChild=IntPtr.Zero;
IntPtr currChild=IntPtr.Zero;
while(true&&ct

2) 从第二个图像中,我需要从父句柄(00300762)获取一个列表框(000DD04A4),并选择列表框中的第一项


FindWindowEx
不是递归的。编辑控件是ComboBox控件的子控件,ComboBox控件是Combobox32控件的子控件,Combox32控件是父对话框的子控件。您需要依次搜索所有句柄。添加了一个递归函数来搜索所有子句柄,父句柄为“Select Database File”,但它会返回一个句柄编号列表。每次应用程序运行句柄数时,它们都会不同。我如何识别我需要进入的孩子。听起来像是我的工作。如果没有其他功能,它将为您提供更丰富的信息来标识特定的UI交互点。您可以使用从其句柄获取窗口标题。