Pascal GLibWMI:Windows 管理规范的强大封装库
项目概述
GLibWMI 是一个用于 Pascal(特别是 Delphi 和 Free Pascal)的开源库,它提供了对 Windows 管理规范(WMI)的简洁、高效的封装。该项目由 NeftaliDelphi 开发并维护,旨在简化 Pascal 开发者访问 Windows 系统管理信息的过程。
核心特性
1. 简洁的 API 设计
GLibWMI 提供了直观的类和方法,使得查询 WMI 信息变得简单直接,无需深入了解复杂的 WMI 底层结构。
2. 跨编译器兼容
支持 Delphi 和 Free Pascal/Lazarus,确保代码在不同 Pascal 开发环境中的可移植性。
3. 类型安全
通过强类型接口提供 WMI 数据访问,减少运行时错误。
4. 异步支持
提供异步查询功能,避免在获取大量系统信息时阻塞主线程。
5. 丰富的示例
项目包含多个实用示例,帮助开发者快速上手。
安装与配置
通过 Git 克隆项目:
git clone https://github.com/NeftaliDelphi/GLibWMI.git
手动安装:
下载项目 ZIP 文件
将
GLibWMI文件夹添加到 Pascal 项目的搜索路径中在需要使用的单元中添加
GLibWMI引用
使用示例
示例 1:获取系统基本信息
uses
GLibWMI;
procedure GetSystemInfo;
var
WMI: TGLibWMI;
Results: TGLibWMIResults;
begin
WMI := TGLibWMI.Create;
try
// 查询操作系统信息
Results := WMI.Query('SELECT * FROM Win32_OperatingSystem');
if Results.Count > 0 then
begin
WriteLn('操作系统: ', Results[0].GetString('Caption'));
WriteLn('版本: ', Results[0].GetString('Version'));
WriteLn('架构: ', Results[0].GetString('OSArchitecture'));
WriteLn('安装日期: ', Results[0].GetDateTime('InstallDate'));
end;
finally
Results.Free;
WMI.Free;
end;
end;示例 2:获取 CPU 信息
procedure GetCPUInfo;
var
WMI: TGLibWMI;
Results: TGLibWMIResults;
i: Integer;
begin
WMI := TGLibWMI.Create;
try
Results := WMI.Query('SELECT * FROM Win32_Processor');
for i := 0 to Results.Count - 1 do
begin
WriteLn('CPU ', i + 1, ':');
WriteLn(' 名称: ', Results[i].GetString('Name'));
WriteLn(' 制造商: ', Results[i].GetString('Manufacturer'));
WriteLn(' 核心数: ', Results[i].GetInteger('NumberOfCores'));
WriteLn(' 逻辑处理器: ', Results[i].GetInteger('NumberOfLogicalProcessors'));
WriteLn(' 当前时钟速度: ', Results[i].GetInteger('CurrentClockSpeed'), ' MHz');
end;
finally
Results.Free;
WMI.Free;
end;
end;示例 3:获取磁盘信息
procedure GetDiskInfo;
var
WMI: TGLibWMI;
Results: TGLibWMIResults;
TotalSize, FreeSpace: Int64;
begin
WMI := TGLibWMI.Create;
try
Results := WMI.Query('SELECT * FROM Win32_LogicalDisk WHERE DriveType = 3');
for var i := 0 to Results.Count - 1 do
begin
WriteLn('磁盘 ', Results[i].GetString('DeviceID'));
WriteLn(' 文件系统: ', Results[i].GetString('FileSystem'));
TotalSize := Results[i].GetInt64('Size');
FreeSpace := Results[i].GetInt64('FreeSpace');
WriteLn(' 总大小: ', FormatFloat('0.00', TotalSize / (1024*1024*1024)), ' GB');
WriteLn(' 可用空间: ', FormatFloat('0.00', FreeSpace / (1024*1024*1024)), ' GB');
WriteLn(' 使用率: ', FormatFloat('0.00', (1 - FreeSpace/TotalSize) * 100), '%');
end;
finally
Results.Free;
WMI.Free;
end;
end;示例 4:监控进程信息
procedure MonitorProcesses;
var
WMI: TGLibWMI;
Results: TGLibWMIResults;
begin
WMI := TGLibWMI.Create;
try
// 获取前10个内存使用最多的进程
Results := WMI.Query(
'SELECT TOP 10 Name, ProcessId, WorkingSetSize ' +
'FROM Win32_Process ' +
'ORDER BY WorkingSetSize DESC'
);
WriteLn('内存使用最多的进程:');
WriteLn('----------------------------------------');
for var i := 0 to Results.Count - 1 do
begin
WriteLn(
Format('%-30s PID: %-6d 内存: %.2f MB', [
Results[i].GetString('Name'),
Results[i].GetInteger('ProcessId'),
Results[i].GetInt64('WorkingSetSize') / (1024*1024)
])
);
end;
finally
Results.Free;
WMI.Free;
end;
end;示例 5:异步查询示例
uses
GLibWMI, GLibWMI.Async;
procedure AsyncQueryExample;
var
AsyncWMI: TGLibWMIAsync;
begin
AsyncWMI := TGLibWMIAsync.Create;
try
// 设置查询完成事件
AsyncWMI.OnQueryComplete := procedure(Results: TGLibWMIResults)
begin
try
if Results.Count > 0 then
begin
WriteLn('计算机名称: ', Results[0].GetString('Name'));
WriteLn('制造商: ', Results[0].GetString('Manufacturer'));
WriteLn('型号: ', Results[0].GetString('Model'));
end;
finally
Results.Free;
end;
end;
// 执行异步查询
AsyncWMI.QueryAsync('SELECT * FROM Win32_ComputerSystem');
// 这里可以继续执行其他操作,查询会在后台进行
finally
AsyncWMI.Free;
end;
end;高级用法
自定义 WMI 查询
procedure CustomWMIQuery;
var
WMI: TGLibWMI;
Results: TGLibWMIResults;
begin
WMI := TGLibWMI.Create;
try
// 使用自定义命名空间和查询
WMI.Namespace := 'root\CIMV2';
Results := WMI.Query(
'SELECT Name, State, StartMode ' +
'FROM Win32_Service ' +
'WHERE State = "Running"'
);
WriteLn('运行中的服务:');
for var i := 0 to Results.Count - 1 do
begin
WriteLn(
Format('%-40s 启动模式: %s', [
Results[i].GetString('Name'),
Results[i].GetString('StartMode')
])
);
end;
finally
Results.Free;
WMI.Free;
end;
end;实际应用场景
系统监控工具:开发系统资源监控应用程序
IT 管理软件:创建远程系统管理工具
诊断工具:开发系统诊断和故障排除工具
资产管理系统:收集和管理计算机硬件和软件资产信息
性能分析工具:监控和分析系统性能指标
优势与特点
易于使用:相比直接使用 Windows API 或 COM 接口,GLibWMI 提供了更简洁的抽象层
性能优化:经过优化的查询执行和数据检索机制
错误处理:完善的异常处理和错误报告机制
活跃维护:项目持续更新,修复问题并添加新功能
文档齐全:提供详细的 API 文档和示例代码
注意事项
权限要求:某些 WMI 查询可能需要管理员权限
性能考虑:复杂的查询可能影响系统性能,建议在后台线程中执行
兼容性:不同 Windows 版本可能支持不同的 WMI 类和属性
结语
GLibWMI 为 Pascal 开发者提供了一个强大而优雅的解决方案,用于访问 Windows 系统的管理信息。无论是开发系统工具、监控应用程序还是管理软件,GLibWMI 都能显著简化开发过程,提高代码的可读性和可维护性。
通过上述示例,您可以看到 GLibWMI 如何将复杂的 WMI 查询简化为几行清晰的 Pascal 代码。如果您正在寻找一个可靠的 Pascal WMI 封装库,GLibWMI 绝对值得尝试。
访问 GitHub 项目页面 获取最新版本、完整文档和更多示例代码。




还没有评论,来说两句吧...