C# 如何使用WinApi获取嵌套子句柄并设置其值
我正在尝试设置以下两个句柄的文本和列表框选定值: 1) 从下面的第一张图片:句柄名称“选择数据库文件”父-编辑,文本框并设置它的属性。我可以获取父句柄,但无法获取子编辑(textbox)并设置其文本属性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 =
//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交互点。您可以使用从其句柄获取窗口标题。