Python GUI自动更改注销按钮的策略。pywinauto.findwindows.ElementNotFoundError:错误。如何切换上下文?

Python GUI自动更改注销按钮的策略。pywinauto.findwindows.ElementNotFoundError:错误。如何切换上下文?,python,pywinauto,Python,Pywinauto,我正在自动执行更改注销按钮策略的步骤。所涉及的步骤包括: 使用gpedit.msc打开本地组策略 从左窗格的用户配置>管理模板中的下拉列表中选择“开始菜单和任务栏” 在右侧窗格中,双击“更改开始菜单电源按钮” 选择单选按钮“已启用” 从选项下拉菜单中:选择“注销” 我已经完成了第三步,但在第二步映射“更改开始菜单电源按钮”时遇到了问题。我的代码如下: from pywinauto import Application Application().start(r'mmc gpedit.msc')

我正在自动执行更改注销按钮策略的步骤。所涉及的步骤包括:

  • 使用gpedit.msc打开本地组策略

  • 从左窗格的用户配置>管理模板中的下拉列表中选择“开始菜单和任务栏”

  • 在右侧窗格中,双击“更改开始菜单电源按钮”

  • 选择单选按钮“已启用”

  • 从选项下拉菜单中:选择“注销”

  • 我已经完成了第三步,但在第二步映射“更改开始菜单电源按钮”时遇到了问题。我的代码如下:

    from pywinauto import Application
    
    Application().start(r'mmc gpedit.msc') 
    app = Application(backend="uia").connect(path='mmc.exe')
    #app.LocalGroupPolicyEditor.dump_tree()
    
    Admin_template = app.LocalGroupPolicyEditor.child_window(title="User 
    Configuration", control_type="TreeItem").child_window(title="Administrative 
    Templates", control_type="TreeItem") # since there are same templates 
    Admin_template.double_click_input() # it expands the subtree
    #Admin_template.dump_tree()
    
    Start_menu = Admin_template.child_window(title="Start Menu and Taskbar", 
    control_type="TreeItem").double_click_input()
    Start_menu.dump_tree()
    #Admin_template.child_window(title="Start Menu and Taskbar", 
    control_type="TreeItem").dump_tree()
    
    #Change_start_menu = Start_menu.child_window(title="Change Start Menu power 
    #button", control_type="MenuItem").double_click_input()
    #Change_start_menu.dump_tree()
    
    在右窗格中查找和映射元素时遇到问题。另外,当我使用
    Start\u menu.dump\u tree()
    时,只显示“通知”元素。然而,剩下的,包括“更改开始菜单电源按钮”,是我将双击的下一步


    我感谢你的帮助。谢谢。

    这有点棘手,但这应该可以完成工作(它完成您列出的所有步骤-按“确定”-并关闭程序):

    请确保以管理员身份运行此脚本,否则它将失败

    如果您对代码有任何疑问,请随时提问:)

    编辑:


    如果您运行的是pywinauto版本,您是不是太深入了?我想右边的窗格应该是“应用程序”中的一个项目,但没有将其作为“树项”进行查看。对不起,我没有理解您。。。你能详细说明你的问题吗?右边的窗格和左边的窗格不在同一棵树上,除非你在树上爬得足够高。“app”而不是“app.LocalGroupPolicyEditor”的子窗口是什么?”“AttributeError:既没有找到GUI元素(包装器)也没有找到包装器方法“dump_tree”(打字?)“app.dumptree()的错误是否也可以检查dumptree中的“app.LocalGroupPolicyEditor”?0.6.6是最新版本。它改进了组合框方法。因此,更新后可能不需要
    send_key
    解决方法。
    import pywinauto
    
    pywinauto.Application().start(r'mmc gpedit.msc') 
    app = pywinauto.Application(backend="uia").connect(path='mmc.exe')
    
    admin_template = app.LocalGroupPolicyEditor.child_window(title="User Configuration", control_type="TreeItem").child_window(title="Administrative Templates", control_type="TreeItem")
    admin_template.double_click_input()
    
    start_menu = admin_template.child_window(title="Start Menu and Taskbar", control_type="TreeItem")
    start_menu.double_click_input()
    
    option_list = app.LocalGroupPolicyEditor.child_window(auto_id="12786", control_type="List")
    
    # Just select any of the first options to change the focus to the list.
    first_elem = option_list.child_window(title="Add Search Internet link to Start Menu", control_type="ListItem")
    first_elem.click_input()
    
    # Used to scroll down the window so that the wanted option becomes visible.
    pywinauto.keyboard.send_keys("cccc")
    
    option = option_list.child_window(title="Change Start Menu power button", control_type="ListItem")
    option.double_click_input()
    
    pop_up = app.LocalGroupPolicyEditor.child_window(auto_id="tableLayoutFullForm", control_type="Pane")
    
    radio = pop_up.child_window(title="Enabled", auto_id="radioButtonEnabled", control_type="RadioButton")
    radio.click_input()
    
    drop_down = pop_up.child_window(title="Choose one of the following actions", auto_id="dropDownListChoose one of the following actions", control_type="ComboBox")
    drop_down.click_input()
    
    # 'Hack' to first select the Restart option and then the next option after that which starts with l (=Log off).
    # This ensures that the correct setting gets set despite of what the setting was before.
    pywinauto.keyboard.send_keys("rl{ENTER}")
    
    ok = pop_up.child_window(title="OK", auto_id="buttonOK", control_type="Button")
    ok.click_input()
    
    app.kill()
    
    pywinauto.SendKeysCtypes.SendKeys()
    
    pywinauto.keyboard.SendKeys()