продолжить выполнение после контекстного менеджера `with ... as`

прошу подсказки) задача: по ЛКМ вывести в терминал текущее активное окно windows, по ПКМ - выход

import win32gui
from pynput import mouse

button = None
def on_click(x, y, button, pressed):
    print('{0} at {1}'.format('Pressed' if pressed else 'Released', (x, y)))
    if button == mouse.Button.right:
        # Stop listener
        return False

with mouse.Listener(on_click=on_click) as listener:
    listener.join()

windowTile = ""
while button == mouse.Button.left: 
    newWindowTile = win32gui.GetWindowText(win32gui.GetForegroundWindow())
    if newWindowTile != windowTile:
        windowTile = newWindowTile
        print(windowTile)

но после контекстного менеджера with ... as, т.е. после listener.join() код дальше не выполняется. как быть? )


Ответы (1 шт):

Автор решения: Meretan

Вызов метода join блокирует вызывающий поток до тех пор, пока не будет выполнен вызываемый, поэтому код дальше и не выполняется.

Попробуйте название текущего окна выводить в функции on_click:

def on_click(x, y, button, pressed):
    print('{0} at {1}'.format('Pressed' if pressed else 'Released', (x, y)))
    if button == mouse.Button.right:
        # Stop listener
        return False
    elif button == mouse.Button.left:
        print(win32gui.GetWindowText(win32gui.GetForegroundWindow()))

В таком варианте не потребуются переменные button и windowTile

→ Ссылка