1

我正在尝试从具有 3 个列表 (SysListView32) 的窗口中获取数据。我对它们三个都做了同样的事情,UISpy 和 Inspect 都可以看到它们三个中的行和单元格,但是在代码中它们中的两个可以完美运行(Caption="List2" 和 Caption="List3"),但是第三个只包含白色的空字符串。

如果我尝试:

IntPtr PrizeListHandle = Win32Utils.FindWindowByCaption(Lobby, "List1");
IUIAutomationElement dataGridPrizes = autom.ElementFromHandle(PrizeListHandle);
IUIAutomationGridPattern gridPrizes = dataGridPrizes.GetCurrentPattern(10006);

string linea = gridPrizes.GetItem(0, 0).CurrentName;

linea变为空字符串,gridPrizes 有 17 行 3 列,所有单元格都是空字符串。

如果我尝试:

IntPtr PrizeListHandle = Win32Utils.FindWindowByCaption(Lobby, "List1");
IUIAutomationElement dataGridPrizes = autom.ElementFromHandle(PrizeListHandle);
int propIdClassName = 30004; // UIA_ClassNamePropertyId;
IUIAutomationPropertyCondition conditionListItem = (IUIAutomationPropertyCondition)autom.CreatePropertyCondition(propIdClassName, "list item");
IUIAutomationElementArray children = dataGridPrizes.FindAll(interop.UIAutomationCore.TreeScope.TreeScope_Children, conditionListItem);

int i = children.Length;

是0。为什么?

重要的是要注意,当使用 UISpy 时,它会发现一切。此外,我已经尝试在自动化上管理一个非托管版本,结果完全相同。

我正在使用 Windows Server 2008 R2。

这是一个屏幕截图: 在此处输入图像描述

先感谢您

4

1 回答 1

0

您需要使用ScrollItemPattern.ScrollIntoView()进入视野。

var pattern = (ScrollItemPattern)aeDataGridCell
    .GetCurrentPattern(ScrollItemPatternIdentifiers.Pattern);
pattern.ScrollIntoView();
于 2013-09-07T05:38:53.947 回答