c# - 如何使用 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;
}
2)从第二张图片中,我需要从父句柄(00300762)中获取一个列表框(000DD04A4)并选择列表框中的第一项,
解决方案
推荐阅读
- python - Pyspark : Multiple join condition with cast type as string
- c++ - tic tac toe using functions only. in C++
- ruby-on-rails - Update Rails to Hotwire Gives a 304
- vagrant - Can not vagrant up virtual box - The provider 'virtualbox' that was requested to back the machine 'default' - /dev/vboxdrv does not exist
- node.js - 有没有办法在不输入服务器地址的情况下获取
- elasticsearch - 格式错误的查询,应为“END_OBJECT”,但找到了“FIELD_NAME”
- javascript - Websockets 在 React JS + Electron NodeJS 应用程序中多次连接
- node.js - Which one of these methods would be faster?
- python - 使用 google 样式的文档字符串键入注释
- bash - 将命令结果存储在变量更改结果中