【发布时间】:2025-12-05 18:50:02
【问题描述】:
我一直在尝试使用作为 TLB 导入 Delphi 的 UIAutomationCore 库从标准 Windows 应用程序中获取菜单子项列表 - 即
File -> New | Exit
Help -> About
我可以获得应用程序菜单,然后将*项目放入列表中(即在上面的示例中,“文件”和“帮助”,但我无法获得这些菜单项下的任何控件的列表。我的代码如下 - FElement 代表我正在检查的实际菜单项。
FindAll 返回的集合长度始终为 0。我在这段代码之前尝试过扩展 menuitem,但似乎没有任何效果。
UIAuto.CreateTrueCondition(condition);
FItems := TObjectList<TAutomationMenuItem>.create;
self.Expand;
sleep(3000);
// Find the elements
self.FElement.FindAll(TreeScope_Descendants, condition, collection);
collection.Get_Length(length);
for count := 0 to length -1 do
begin
collection.GetElement(count, itemElement);
itemElement.Get_CurrentControlType(retVal);
if (retVal = UIA_MenuItemControlTypeId) then
begin
item := TAutomationMenuItem.Create(itemElement);
FItems.Add(item);
end;
end;
我可以在 C# 中看到这样的示例,它们并没有真正做与上面的代码不同的任何事情(据我所知)
提前致谢
更新:和question很像
Update2 :在此示例中,它试图为另一个 Delphi 应用程序执行此操作。但是,如果我在记事本上尝试同样的事情(例如),就会出现同样的问题。
Update3:使用 Inspect(然后使用 UI 自动化),我有以下结构 ...
名称 = 退出 祖先 = 文件(菜单)Form1(窗格)
我在展开菜单(文件)后也试过这个,同样的事情正在发生(或没有发生)。
【问题讨论】:
-
目标应用程序是什么? Inspect 告诉您有关目标应用程序菜单的哪些信息?当您在记事本等设备上使用代码时,您的代码是否按预期工作?
-
查看更新2了解更多详情
-
我认为您确实需要展开菜单项以获取其内容。尝试使用 Inspect 查看应用。
-
我试图帮助并处理您的示例,但没有成功。我已经能够以编程方式展开菜单,但即使在那之后,UIAutomation 也看不到子菜单。这里出了点问题。
-
@Wodzu 使用 Inspect 扩展时可以看到它们
标签: delphi microsoft-ui-automation