У меня есть класс для взаимодействия с windows приложением (для взаимодействия используется COM-оболочка win32). В определенное время он запускает диалоговое окно, которое блокирует основной процесс.
Это окно должно обрабатываться одним из методов в классе, а затем закрываться.
Я хотел бы сделать все элементы управления из одного и того же процесса, чтобы избежать запуска отдельного сценария python для обработки окна.
Пробовал несколько вариантов asyn c -aait, но ни один работал (один из примеров ниже). В любом случае вызов диалогового окна все еще блокирует процесс.
import asyncio
class AsyncClicker:
async def __aenter__(self):
return self
async def __aexit__(self, *args, **kwargs):
return
async def click_upload(self):
#reconnect to app in other thread(?)
session = win32com.client.GetObject("App")
# next line will block the process
session.findById("DialogButtonID").press()
return
class xApp:
def __init__(self):
session = win32com.client.GetObject("App")
# async handlers
self.clicker = AsyncClicker()
self.loop = asyncio.get_event_loop()
def multi_input_from_text(self):
self.loop.run_forever(self.__async_click_text_input())
# some interactions with dialog window
self.loop.stop()
async def __async_click_text_input(self):
#interactions with app
async with self.clicker as echo:
await echo.click_upload()
return
#app interactions
app = xApp()
app.multi_input_from_text()