Jeremy
Jeremy

Reputation: 79

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.

Upvotes: 1

Views: 1991

Answers (3)

Jeremy
Jeremy

Reputation: 79

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 !")

Upvotes: 1

Jeremy
Jeremy

Reputation: 79

Currently, I re-write a part of my code :

from pywinauto import taskbar
from pywinauto.application import Application
from pywinauto.keyboard import *
from tkinter.messagebox import *

[...]

app_dir = r'C:\Program Files\Common Files\App\App.exe'
_user = "TOTO"
_pass = "TOTOPASS"

# Check if my app has its system tray icon in the taskbar
for i in range(0, 10):
     tsIcon = taskbar.SystemTrayIcons.wrapper_object()
     tsValue = tsIcon.button(i).info.text
     # If I find it, the code click on it and its menu until the popup auth window come
     if "App_name" in tsValue:
        _pApp = Application().connect(path=app_dir)
        taskbar.ClickSystemTrayIcon(i)
        _pApp.PopupMenu.menu_item('menu').click_input()
        _pApp.PopupMenu.menu_item('menu->submenu').click_input()
        time.sleep(2)
        # When the popup window comes out, I run 'send_keys'
        send_keys(_user)
        send_keys("{VK_TAB}")
        send_keys(_pass)
        send_keys("{ENTER}")
     else:
        showwarning("Error", "App not found !")
[...]

My code seems good ? There is another "most clean" method ?

Thanks

Upvotes: 0

Jeremy
Jeremy

Reputation: 79

I finally found a solution with pywinauto.keyboard. I don't know if it's clean but it works.

from pywinauto.keyboard import *
[...]
send_keys(_user)
send_keys("{VK_TAB}")
send_keys(_pass)
send_keys("{ENTER}")

Upvotes: 1

Related Questions