продолжить выполнение после контекстного менеджера `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