使用pywinauto

时间:2018-10-07 18:35:01

标签: windows taskbar pywinauto

我想访问窗口任务栏中的按钮(例如IE,资源管理器等)。我需要某个按钮的automationId。

如果我使用了Visual UI Automation工具,则会看到按钮在工具栏“正在运行的应用程序”(MSTaskListWClass类)中。

(对不起,我无法发布图片,因为这是我的第一篇帖子)

我尝试:

>>> taskbar.RunningApplications
<pywinauto.application.WindowSpecification object at 0x02F5C830>
>>> taskbar.RunningApplications.children()
[]

=>我不明白,因为正在运行的应用程序任务栏不是空的(至少是当前的cmd应用程序)

我也尝试:

from pywinauto.application import Application
from pywinauto import Desktop
import pywinauto 
import re as regex

def dump(o):
    s = ("name %s ClassName %s Hdler %s" % (o.name.encode('utf-8'),o.class_name.encode('utf-8'),hex(o.handle)))
    return s 

# Point d'entree l 1
l1 = pywinauto.findwindows.find_elements(class_name_re = 'Shell_TrayWnd')
print("Lg %d - %s" % (len(l1),dump(l1[0])))   

l2 = pywinauto.findwindows.find_elements(class_name_re = 'ReBarWindow32')
print l2    

shell_TrayWnd = l1[0]
l3 =  shell_TrayWnd.children()  
for i in range(len(l3)): 
   if regex.search('MSTaskSwWClass',l3[i].class_name):
      print ("Fuundl3[%2d] %s" % (i, dump(l3[i]))) 
      listButton = l3[i].children()[0]

print("listButton  %s" % (dump(listButton))) 
print listButton.children()

这是示例问题:正在运行的应用程序列表似乎为空。

所以我的问题是:

  • pywauto用法错误?
  • MSTaskListWClass GUi元素的按钮子级是吗? Visual UI自动化工具为每个按钮提供0x00作为Handler。这很奇怪
  • 发现pywinauto错误?问题似乎出在pywinauto 0.61或0.65
  • 使用pywinauto不可能做到这一点?
  • 如果我成功访问正在运行的应用程序按钮,是否可以读取AutomationId字段?

感谢您的想法或建议, PHLinux

1 个答案:

答案 0 :(得分:0)

find_elements是一个不建议直接使用的低级功能(在Getting Started Guide中没有提及)。这段代码对我有用:

from pywinauto import Application

app = Application(backend="uia").connect(title='Taskbar') # backend is important!!!
#app.Taskbar.dump_tree() # was needed for next step, just copied child_window spec from here

running_apps = app.Taskbar.child_window(title="Running applications", control_type="ToolBar")
print([w.window_text() for w in running_apps.children()])
# running_apps.dump_tree() # another debug print for auto_id properties advice