尽管在 Pywinauto 中可见,但无法识别 WPF 树项
Can't get WPF tree items to be recognized despite being visible in Pywinauto
已使用 64 位下载 pywinauto 6.4 python。
我让这段代码运行了一次...我将整个解释器会话留在了 notepad++ 中。我回来追溯我的步骤,现在我无法让已经在工作的东西工作。为什么我不能与树项目交互?前几天它起作用了,但现在我似乎无法 "see" 树中的任何项目,即使它们显示为 print_control_identifiers()
这是一个 WPF 应用程序,我在它已经打开后连接到它:
>>> import pywinauto
>>> from pywinauto.application import Application
>>> app = Application(backend="uia").connect(title_re=".*POS UI", class_name="Window")
>>> app.POS_UI.draw_outline()
>>> dlg_Xtree1.print_control_identifiers()
Control Identifiers:
TreeView - 'POS_IntranetAPP_Tree1' (L-839, T-1164, R-643, B-925)
['TreeView', 'POS_IntranetAPP_Tree1TreeView', 'POS_IntranetAPP_Tree1']
child_window(title="POS_IntranetAPP_Tree1", auto_id="POS_IntranetAPP_Tree1", control_type="Tree")
|
| TreeItem - 'POS.Tree.Thing. ' (L-838, T-1163, R-707, B-1141)
| ['TreeItem', 'POS.Tree.Thing. ', 'POS.Tree.Thing. TreeItem', 'TreeItem0', 'TreeItem1', 'POS.Tree.Thing. 0', 'POS.Tree.Thing. 1', 'POS.Tree.Thing. TreeItem0', 'POS.Tree.Thing. TreeItem1']
| child_window(title="POS.Tree.Thing. ", control_type="TreeItem")
|
| TreeItem - 'POS.Tree.Thing. ' (L-838, T-1141, R-701, B-1119)
| ['TreeItem2', 'POS.Tree.Thing. 2', 'POS.Tree.Thing. TreeItem2']
| child_window(title="POS.Tree.Thing. ", control_type="TreeItem")
|
| TreeItem - 'POS.Tree.Thing. ' (L-838, T-1119, R-679, B-1097)
| ['TreeItem3', 'POS.Tree.Thing. 3', 'POS.Tree.Thing. TreeItem3']
| child_window(title="POS.Tree.Thing. ", control_type="TreeItem")
>>> dlg_Xtree1.treeitem2.expand
<bound method UIAWrapper.expand of <uia_controls.TreeItemWrapper -
'POS.Tree.Thing', TreeItem,
但是现在,即使它可以看到 "tree view",它也完全看不到树项目。我尝试重新连接到该应用程序,认为它可能不会刷新。我只是不明白...它曾工作过一次,但现在无论我做什么,我都无法正常工作。
>>> dlg_Xtree1.TreeItem3.draw_outline()
pywinauto.findbestmatch.MatchError: Could not find 'TreeItem3' in 'dict_keys([])'
奇怪的是,在我手动展开菜单后,我可以在完全不更改代码的情况下展开和折叠同一个菜单。我不确定这意味着什么或如何解决它。
哈哈,我通过关闭所有内容并重新打开备份来检验我的假设,但现在我无法让它再次工作。 :(
好吧,现在看来,为了让 "window" 栩栩如生,您必须与其他控件进行交互。它在 inspect.exe 中可见,pywinauto 可以通过 print_control_identifiers() 看到它但不能与之交互。
如果您使用 connect()
,请始终将 运行 脚本视为管理员。这可能是一个原因。使用 start()
,子进程通常具有相同的特权级别,因此问题不存在。
已使用 64 位下载 pywinauto 6.4 python。
我让这段代码运行了一次...我将整个解释器会话留在了 notepad++ 中。我回来追溯我的步骤,现在我无法让已经在工作的东西工作。为什么我不能与树项目交互?前几天它起作用了,但现在我似乎无法 "see" 树中的任何项目,即使它们显示为 print_control_identifiers()
这是一个 WPF 应用程序,我在它已经打开后连接到它:
>>> import pywinauto
>>> from pywinauto.application import Application
>>> app = Application(backend="uia").connect(title_re=".*POS UI", class_name="Window")
>>> app.POS_UI.draw_outline()
>>> dlg_Xtree1.print_control_identifiers()
Control Identifiers:
TreeView - 'POS_IntranetAPP_Tree1' (L-839, T-1164, R-643, B-925)
['TreeView', 'POS_IntranetAPP_Tree1TreeView', 'POS_IntranetAPP_Tree1']
child_window(title="POS_IntranetAPP_Tree1", auto_id="POS_IntranetAPP_Tree1", control_type="Tree")
|
| TreeItem - 'POS.Tree.Thing. ' (L-838, T-1163, R-707, B-1141)
| ['TreeItem', 'POS.Tree.Thing. ', 'POS.Tree.Thing. TreeItem', 'TreeItem0', 'TreeItem1', 'POS.Tree.Thing. 0', 'POS.Tree.Thing. 1', 'POS.Tree.Thing. TreeItem0', 'POS.Tree.Thing. TreeItem1']
| child_window(title="POS.Tree.Thing. ", control_type="TreeItem")
|
| TreeItem - 'POS.Tree.Thing. ' (L-838, T-1141, R-701, B-1119)
| ['TreeItem2', 'POS.Tree.Thing. 2', 'POS.Tree.Thing. TreeItem2']
| child_window(title="POS.Tree.Thing. ", control_type="TreeItem")
|
| TreeItem - 'POS.Tree.Thing. ' (L-838, T-1119, R-679, B-1097)
| ['TreeItem3', 'POS.Tree.Thing. 3', 'POS.Tree.Thing. TreeItem3']
| child_window(title="POS.Tree.Thing. ", control_type="TreeItem")
>>> dlg_Xtree1.treeitem2.expand
<bound method UIAWrapper.expand of <uia_controls.TreeItemWrapper -
'POS.Tree.Thing', TreeItem,
但是现在,即使它可以看到 "tree view",它也完全看不到树项目。我尝试重新连接到该应用程序,认为它可能不会刷新。我只是不明白...它曾工作过一次,但现在无论我做什么,我都无法正常工作。
>>> dlg_Xtree1.TreeItem3.draw_outline()
pywinauto.findbestmatch.MatchError: Could not find 'TreeItem3' in 'dict_keys([])'
奇怪的是,在我手动展开菜单后,我可以在完全不更改代码的情况下展开和折叠同一个菜单。我不确定这意味着什么或如何解决它。
哈哈,我通过关闭所有内容并重新打开备份来检验我的假设,但现在我无法让它再次工作。 :(
好吧,现在看来,为了让 "window" 栩栩如生,您必须与其他控件进行交互。它在 inspect.exe 中可见,pywinauto 可以通过 print_control_identifiers() 看到它但不能与之交互。
如果您使用 connect()
,请始终将 运行 脚本视为管理员。这可能是一个原因。使用 start()
,子进程通常具有相同的特权级别,因此问题不存在。