当前位置:首页>python>使用 Python 标准库获取 Windows 系统信息

使用 Python 标准库获取 Windows 系统信息

  • 2026-10-11 07:33:24
使用 Python 标准库获取 Windows 系统信息

什么是 ctypes?

ctypes 是 Python 的标准库,它让你能够调用 Windows 的底层 API 函数。简单说,就是用 Python 代码直接和操作系统对话。

你不需要安装任何第三方库,Python 自带这个功能。

代码逐行解释

第一步:导入 ctypes

import ctypes

这一行导入 ctypes 模块,它是 Python 和 Windows API 之间的桥梁。

第二步:定义系统信息结构体

class SYSTEM_INFO(ctypes.Structure):    _fields_ = [        ("wProcessorArchitecture", ctypes.c_ushort),   # 处理器架构        ("wReserved", ctypes.c_ushort),        ("dwPageSize", ctypes.c_ulong),                     # 页大小        ("lpMinimumApplicationAddress", ctypes.c_void_p),   # 程序可以使用最小地址空间        ("lpMaximumApplicationAddress", ctypes.c_void_p),   # 程序可以使用最大地址空间        ("dwActiveProcessorMask", ctypes.c_void_p),         # 当前激活的处理器掩码        ("dwNumberOfProcessors", ctypes.c_ulong),           # 处理器数量(逻辑)        ("dwProcessorType", ctypes.c_ulong),                # 处理器类型        ("dwAllocationGranularity", ctypes.c_ulong),        # 分配粒度        ("wProcessorLevel", ctypes.c_ushort),               # 处理器级别        ("wProcessorRevision", ctypes.c_ushort),            # 处理器修订版本    ]

这里定义了一个 SYSTEM_INFO 结构体,它和 Windows 系统内部的 SYSTEM_INFO 结构完全对应。

关键点: - _fields_ 告诉 Python 这个结构体包含哪些字段 - 每个字段由 (字段名,数据类型) 组成 - c_ushort 表示无符号短整型(2 字节) - c_ulong 表示无符号长整型(4 字节) - c_void_p 表示指针类型

第三步:加载 Windows 系统库

kernel32 = ctypes.windll.kernel32

kernel32.dll 是 Windows 的核心动态链接库,包含大量系统级函数。ctypes.windll.kernel32 加载这个库,让你能够调用里面的函数。

第四步:调用 GetSystemInfo 函数

system_info = SYSTEM_INFO()kernel32.GetSystemInfo(ctypes.byref(system_info))
•SYSTEM_INFO() 创建一个空的结构体实例
•ctypes.byref(system_info) 获取这个实例的引用(指针)
•GetSystemInfo 函数会填充这个结构体,把系统信息写进去

注意: Windows API 函数通常通过指针参数返回数据,而不是直接返回值。

第五步:打印结果

print(f"处理器架构:{system_info.wProcessorArchitecture}")print(f"页面大小:{system_info.dwPageSize}")print(f"处理器数量:{system_info.dwNumberOfProcessors}")

从填充好的结构体中读取字段值并打印。

运行结果示例

处理器架构:9页面大小:4096处理器数量:8

字段说明: - wProcessorArchitecture = 9 表示 AMD64 架构(64 位系统) - dwPageSize = 4096 表示内存页大小为 4KB - dwNumberOfProcessors = 8 表示有 8 个逻辑处理器

完整代码

import ctypes# 获取当前 Windows 系统的版本信息def get_windows_system_info():# 创建一个结构体用来存储系统信息class SYSTEM_INFO(ctypes.Structure):        _fields_ = [            ("wProcessorArchitecture", ctypes.c_ushort),   # 处理器架构            ("wReserved", ctypes.c_ushort),            ("dwPageSize", ctypes.c_ulong),                     # 页大小            ("lpMinimumApplicationAddress", ctypes.c_void_p),   # 程序可以使用最小地址空间            ("lpMaximumApplicationAddress", ctypes.c_void_p),   # 程序可以使用最大地址空间            ("dwActiveProcessorMask", ctypes.c_void_p),         # 当前激活的处理器掩码            ("dwNumberOfProcessors", ctypes.c_ulong),           # 处理器数量(逻辑)            ("dwProcessorType", ctypes.c_ulong),                # 处理器类型            ("dwAllocationGranularity", ctypes.c_ulong),        # 分配粒度            ("wProcessorLevel", ctypes.c_ushort),               # 处理器级别            ("wProcessorRevision", ctypes.c_ushort),            # 处理器修订版本        ]# 加载 kernel32.dll 库    kernel32 = ctypes.windll.kernel32# 创建 SYSTEM_INFO 实例    system_info = SYSTEM_INFO()# 调用 GetSystemInfo 函数填充系统信息    kernel32.GetSystemInfo(ctypes.byref(system_info))# 返回系统信息的字段return system_info# 调用函数并打印结果system_info = get_windows_system_info()print(f"处理器架构:{system_info.wProcessorArchitecture}")print(f"页面大小:{system_info.dwPageSize}")print(f"处理器数量:{system_info.dwNumberOfProcessors}")

核心知识点总结

概念
说明
ctypes
Python 标准库,用于调用 C 语言编写的动态链接库
Structure
定义与 C 结构体对应的 Python 类
_fields_
声明结构体字段的列表
windll.kernel32
加载 Windows kernel32.dll 库
byref()
获取对象的引用(指针),用于传递给 API 函数
GetSystemInfo
Windows API 函数,填充 SYSTEM_INFO 结构体

这就是使用 Python 标准库获取 Windows 系统信息的全部过程。无需第三方库,纯原生实现。

最新文章

随机文章