import psutil


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


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

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

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

    Returns:
        list[int]: 成功返回匹配到的 PID 列表；失败返回空列表。
    """
    try:
        if not isinstance(进程名, str):
            return []

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

        return [
            int(进程对象.info['pid'])
            for 进程对象 in psutil.process_iter(['pid', 'name'])
            if _进程名是否匹配(进程对象.info['name'], 进程名, 区分大小写)
        ]
    except Exception:
        return []
