Search code examples
pythonpywinauto

Python - How to interact with system tray popup


I want to autologin to an app via its system tray icon. I use the pywinauto module to interact with the tray icon to launch the app and now I have a popup who ask me to log on. But... I don't know how to interact with it !

This is my icon : Tray Icon

Here, an extract of my code (works fine) :

_pApp = Application().connect(path='my_app_dir')
taskbar.ClickSystemTrayIcon(1)
_pApp.PopupMenu.menu_item('submenu').click_input()
_pApp.PopupMenu.menu_item('another_submenu').click_input()

How can I interact with the popup authentication window below ?

Popup window

Thanks for your help.


Solution

  • Finally, I found exactly the expected behavior :)

    Thank you Vasily Ryabov ! Your method is very helpful !

    I do not use 'send_keys' anymore.

    from tkinter.messagebox import *
    from pywinauto import taskbar
    from pywinauto.application import Application
    [...]
    
    _user = "TOTO"
    _pass = "TOTOPASS"
    app_dir = r'C:\Program Files\Common Files\App\App.exe'
    icon_list = list()
    
    # Getting the name of the icons in the sys tray
    for i in range(0, 13):
        app_sti = taskbar.SystemTrayIcons.wrapper_object()
        app_stv = pulse_sti.button(i).info.text
        icon_list.append(app_stv)
    
    # Looking for my app name
    try:
        if "App_name" in str(icon_list):
           app = Application().connect(path=app_dir)
           taskbar.ClickSystemTrayIcon("App name")
           app.PopupMenu.menu_item('menu').click_input()
           app.PopupMenu.menu_item('menu -> submenu').click_input()
           app_auth = Application(backend="uia").connect(title_re="Title*", timeout=5)
           app_auth_window = app_auth.window(title_re="Title*")
           app_auth_window.child_window(title="User :", control_type="Edit").set_text(_user)
           app_auth_window.child_window(title="Password :", control_type="Edit").set_text(_pass)
           app_auth_window.child_window(title="Connect", control_type="Button").click()
    except Exception as error:
        showwarning("Error", "App not found !")