首页 > 解决方案 > 如何使用 WinApi 获取嵌套的子句柄并设置它们的值

问题描述

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

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

//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,int maxCount){

            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;
        }

图片 1 - 文本框

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

图 2

标签: c#.netwinapi

解决方案


推荐阅读