import psutil


def _进程名是否匹配(目标进程名: str | None, 输入进程名: str, 区分大小写: bool) -> bool:
    if not 目标进程名:
        return False
    if 区分大小写:
        return 目标进程名 == 输入进程名
    return 目标进程名.casefold() == 输入进程名.casefold()


def 进程名_取进程路径列表(进程名: str, 区分大小写: bool = False) -> list[str]:
    """
    根据进程名称获取全部匹配进程的程序路径列表。

    功能说明：
        - 默认不区分大小写，例如 "QQ.exe"、"qq.exe"、"QQ.EXE" 都可匹配。
        - 当“区分大小写”为 True 时，会按原始大小写进行完全匹配。
        - 中文进程名会按原字符串正常比较，不会因大小写兼容逻辑报错。
        - 对于无权限访问路径的进程会自动跳过。
        - 参数无效、未找到匹配进程或发生异常时，返回空列表。

    Args:
        进程名 (str): 要查询的进程名称。
        区分大小写 (bool): 是否区分大小写，默认为 False。

    Returns:
        list[str]: 成功返回程序路径列表；失败返回空列表。
    """
    try:
        if not isinstance(进程名, str):
            return []

        进程名 = 进程名.strip()
        if not 进程名:
            return []

        路径列表: list[str] = []
        for 进程对象 in psutil.process_iter(['name']):
            if not _进程名是否匹配(进程对象.info['name'], 进程名, 区分大小写):
                continue
            try:
                程序路径 = 进程对象.exe()
                if 程序路径:
                    路径列表.append(程序路径)
            except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
                continue
        return 路径列表
    except Exception:
        return []
