连接app的封装方法

发布时间 2023-06-23 19:30:25作者: monkeyDragon
import psutil
from pywinauto.application import Application
from pywinauto import Desktop, WindowSpecification


class ConnApp:

    @staticmethod
    def conn_single_proc_app(proc_name: str, proc_path: str, app_backend: str = "win32",
                             wait_time: int | float | None = None,
                             retry_freq: int | float | None = None) -> Application:
        """
        连接单进程应用
        :param proc_name: 进程名
        :param proc_path: 进程路径
        :param app_backend: 应用后端
        :param wait_time: 等待时间
        :param retry_freq: 重试频率
        :return: 应用
        """
        # 获取进程id
        proc_id = None
        for proc in psutil.process_iter():
            if proc.name() == proc_name:
                proc_id = proc.pid
                break

        app = Application(backend=app_backend)

        # 连接应用
        if proc_id is None:
            app.start(cmd_line=proc_path, timeout=wait_time, retry_interval=retry_freq)
        else:
            app.connect(process=proc_id, timeout=wait_time, retry_interval=retry_freq)

        return app

    @staticmethod
    def conn_multi_proc_app(dlg_title: str, app_backend: str = "win32") -> WindowSpecification:
        """
        连接多进程应用
        :param dlg_title: 对话框标题
        :param app_backend: 应用后端
        :return: 对话框
        """
        desktop = Desktop(backend=app_backend)

        # 获取对话框
        dlg = desktop.window(title=dlg_title)

        return dlg