Skip to main content

Device:系统与硬件感知中心

Device 类是 AScript 提供的全方位系统监控工具。它采用静态嵌套类的设计,无需实例化即可直接获取硬件指纹、操作系统状态、屏幕 DPI 缩放以及实时硬件负载等信息。


1. 导入模块

# 导入设备信息类
from ascript.windows.system import Device

2. 身份与系统 (Identity & OS)

🆔 设备指纹 Device.id

获取基于硬件特征生成的唯一标识符。该 ID 具有强稳定性,重装系统通常不会改变。

代码块:

print(f"当前设备 ID: {Device.id}")

💻 操作系统 Device.os

获取 Windows 系统的详细运行状态。

属性列表:

  • .type: (str) 系统类型(如 "Windows")。
  • .release: (str) 发行版本(如 "10", "11")。
  • .boot_time: (str) 系统上次启动的时间点(格式:YYYY-MM-DD HH:MM:SS)。
  • .uptime_seconds: (int) 自启动以来已运行的总秒数。

3. 屏幕与显示 (Screen)

🖥️ 屏幕信息 Device.screen

自动计算 Windows 系统的 DPI 缩放,确保在不同显示器下定位准确。

属性列表:

  • .scale: (float) 系统缩放系数。例如 125% 缩放返回 1.25
  • .percent: (str) 缩放百分比字符串(如 "125%")。
  • .logical: (str) 逻辑分辨率(受缩放影响,脚本实际操作坐标系)。
  • .physical: (str) 屏幕物理真实分辨率(面板原生像素)。

4. 硬件负载与状态 (Hardware)

⚙️ 核心负载

实时获取 CPU 和内存的使用情况。

属性列表:

  • Device.cpu.usage: (float) 当前 CPU 总体占用百分比。
  • Device.memory.total_gb: (float) 物理内存总量 (GB)。
  • Device.memory.percent: (float) 内存当前占用百分比。

🎮 显卡信息 Device.gpu

  • .list: (List[str]) 返回系统中检测到的所有显卡型号。

5. 存储与网络 (Storage & Network)

💿 磁盘管理 Device.disks

获取存储盘符及空间占用。

属性/方法:

  • .list: (List[str]) 获取当前挂载的所有盘符(如 ['C', 'D'])。
  • .get_detail(drive): 获取指定磁盘的容量统计。

参数详解:

  • drive (str): 盘符字母,如 "C""D"
  • 返回 (dict): 包含 total, free, percent 的详细字典。

🌐 网络配置 Device.network

获取基础网络标识。

属性列表:

  • .ip: (str) 当前内网 IP 地址。
  • .mac: (str) 物理网卡 MAC 地址。

💡 案例演示

from ascript.windows.system import Device

# 1. 检查运行权限
if not Device.env.is_admin:
print("⚠️ 警告:当前未以管理员权限运行,部分操作可能受限")

# 2. 打印屏幕适配信息
print(f"系统缩放: {Device.screen.percent}")
print(f"逻辑分辨率: {Device.screen.logical} (脚本以此为准)")

# 3. 监控硬件健康
if Device.memory.percent > 90:
print("🚨 内存告急:当前占用已超过 90%!")

# 4. 获取 D 盘剩余空间
d_info = Device.disks.get_detail("D")
print(f"D 盘剩余空间: {d_info['free']}")

6. 其他环境信息

  • Device.env.is_admin: (bool) 是否拥有管理员权限。
  • Device.env.python_ver: (str) 当前 Python 版本。
  • Device.power.is_plugged: (bool) 当前是否连接了电源适配器。
  • Device.audio.list: (List[str]) 所有可用的音频输出设备。

调用规范

Device 类中的所有嵌套类均通过 classproperty 装饰。这意味着你不需要使用 Device() 进行实例化,直接通过类名访问即可获得实时数据。