WMI(Windows Management Instrumentation,Windows 管理规范)是一项核心的 Windows 管理技术;用户可以使用 WMI 管理本地和远程计算机。

通过使用WMI,我们可以很方便的获取到电脑的系统信息,但是很遗憾的是,我在网上找到的基本上都是对于某个功能的实现,比如查询IP,获取计算机名称,检测操作系统信息等等,如果只是在工作中用到了来查一下是没有问题的,但是,要想全面的了解WMI中的类库,来系统的掌握就很困难,WMI中有哪些系统的类,里面有哪些属性,这些属性都代表什么意思?MSND上面对于vbscript脚本实现的教程很详细,但是具体在delphi中对应的类型和参数名称是不一样的。

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls ,ActiveX,comobj; type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm} //网卡是否接入
function GetNetworkConnected(const sName: string): boolean;
var
C: Cardinal;
Enum: IEnumVariant;
Wmi, Objs, Obj, V: OleVariant;
begin
Result := False;
Wmi := CreateOleObject('WbemScripting.SWbemLocator');
try
// ConnectServer无参表示连接本机 NetConnectionStatus=2 表示已经接入 7表示断开
Objs := Wmi.ConnectServer().ExecQuery('Select * from Win32_NetworkAdapter WHERE NetConnectionStatus=2');
Enum := IEnumVariant(IUnknown(Objs._NewEnum));
Enum.Reset;
//迭代信息
while Enum.Next(, Obj, C) = S_OK do
begin
V := Obj.Properties_.Item('Name', ).Value;
if VarIsClear(V) or VarIsNull(V) then
Continue;
if V=sName then
begin
Result:=True;
Break
end;
end;
finally
Wmi := Unassigned;
end;
end; procedure TForm1.Button1Click(Sender: TObject); begin
ShowMessage(booltostr(GetNetworkConnected(Edit1.Text)));
end; end.

因为WMI中通用的类大多是Win32_开头的,这里只需要传递后面的部分。

那么下一步,怎么知道我需要的是什么参数呢?以获取计算机名为例:

str := GetWMIProperty('OperatingSystem','CSName');即可获得。

当然,计算机名信息是比较常用的,在好几个类里面都有。

Win32_开头的类有:

Win32_Account
Win32_ActiveRoute
Win32_AutochkSetting
Win32_BaseBoard
Win32_BaseService
Win32_BIOS
Win32_BootConfiguration
Win32_Bus
Win32_ComputerSystem
Win32_ComputerSystemWindowsProductActivation
Win32_Desktop
Win32_DesktopMonitor
Win32_DeviceSettings
Win32_DiskDrive
Win32_DiskDrivePhysicalMedia
Win32_DisplayConfiguration
Win32_Environment
Win32_FontIntoAction
Win32_Group
Win32_IDEController
Win32_IP4PersistedRouteTable
Win32_IP4RouteTable
Win32_Keyboard
Win32_LogicalDisk
Win32_LogicalProgramGroup
Win32_LogonSession
Win32_MappedLogicalDisk
Win32_MemoryDevice
Win32_MotherboardDevice
Win32_NetworkAdapter
Win32_NetworkAdapterConfiguration
Win32_NetworkAdapterSetting
Win32_NetworkClient
Win32_NetworkConnection
Win32_OperatingSystem
Win32_PerfFormattedData_RemoteAccess_RASPort
Win32_PerfFormattedData_RemoteAccess_RASTotal
Win32_PerfRawData_RemoteAccess_RASPort

Win32_PhysicalMedia

Win32_PhysicalMemory
Win32_PNPDevice
Win32_PortConnector
Win32_POTSModem
Win32_POTSModemToSerialPort
Win32_Printer
Win32_PrinterConfiguration
Win32_Process
Win32_Processor
Win32_Product
Win32_ProgramGroup
Win32_ScheduledJob
Win32_SerialPort
Win32_SerialPortConfiguration
Win32_SerialPortSetting
Win32_Service
Win32_ServiceControl

Win32_SoundDevice

Win32_StartupCommand
Win32_SystemAccount

Win32_SystemBIOS

Win32_SystemSetting
Win32_SystemTimeZone
Win32_SystemUsers

Win32_TapeDrive

Win32_TemperatureProbe 
Win32_USBController
Win32_USBControllerDevice
Win32_UserAccount

Win32_VideoController
Win32_VideoSettings

Win32_WindowsProductActivation

Win32_NetworkAdapter 网卡 参数说明

AdapterType  --适配器的类型
AdapterTypeID  --适配器的类型ID
AutoSense  --如果为True,网络适配器能自动判断连接或网络媒体的速度
Availability  --可用性和设备的状态
Caption  --设备的简短描述
ConfigManagerErrorCode  --Windows配置管理器错误代码
ConfigManagerUserConfig  --如果为True,该设备使用用户定义的配置
CreationClassName  --第一个具体类的名称出现在创建实例所使用的继承链
Description  --描述
DeviceID  --系统中的其他设备的网络适配器的唯一标识符
ErrorCleared  --如果为True,在上一个错误代码报告现已清除
ErrorDescription  --错误的描述信息
GUID  --全局唯一标识符进行连接
Index  --存储在系统注册表中网络适配器的索引号
InstallDate  --日期和时间对象安装
Installed  --如果为True,网络适配器安装在系统中
InterfaceIndex  --索引值唯一标识本地网络接口
LastErrorCode  --报告的逻辑设备上一个错误代码
MACAddress  --MAC地址
Manufacturer  --制造商的名称
MaxNumberControlled  --通过这个网络适配器支持直接寻址的端口的最大数量
MaxSpeed  --最大速度,以每秒位数,为网络适配器
Name  --适配器的名称
NetConnectionID  --网络连接的名称出现在网络连接控制面板程序
NetConnectionStatus  --网络适配器连接至网络的状态
NetEnabled  --指明适配器是否已启用。如果为True,适配器已启用。您可以启用或通过启用和禁用方法禁用网卡。
NetworkAddresses  --适配器的IP地址
PermanentAddress  --网络地址硬编码到一个适配器。这种硬编码地址,可以通过固件升级或软件配置进行更改
PhysicalAdapter  --指明适配器是否是物理或逻辑适配器。如果为True,适配器是物理
PNPDeviceID  --即插即用逻辑设备的播放设备标识符
PowerManagementCapabilities  --逻辑设备的特定功率相关的能力阵列
PowerManagementSupported  --如果为True,该设备可以是电源管理(可放进入暂停模式,等等)
ProductName  --网络适配器的产品名称
ServiceName  --网络适配器的服务名
Speed  --估计当前带宽比特每秒
Status  --对象的当前状态
StatusInfo  --对象的当前状态详细信息
SystemCreationClassName  --该作用域计算机的创建类别名称属性的值
SystemName  --系统名称

TimeOfLastReset  --最后复位日期和时间的网络适配器

delphi中WMI的使用(网卡是否接入)的更多相关文章

  1. 在delphi中生成GUID

    什么是 GUID ? 全球唯一标识符 (GUID) 是一个字母数字标识符,用于指示产品的唯一性安装.在许多流行软件应用程序(例如 Web 浏览器和媒体播放器)中,都使用 GUID. GUID 的格式为 ...

  2. 在delphi中生成GUID/自动获取临时表名......

    什么是 GUID ? 全球唯一标识符 (GUID) 是一个字母数字标识符,用于指示产品的唯一性安装.在许多流行软件应用程序(例如 Web 浏览器和媒体播放器)中,都使用 GUID. GUID 的格式为 ...

  3. 奇淫怪巧之在Delphi中调用不申明函数

    前一阵子,研究了一段时间的Win32Asm,研究到后来发现Win32的ASM实际上还是和C版的介绍的一样.甚至还封装了一个简版的类似VCL库结构框架的32ASM结构库,不过搞着搞着就没兴趣了,也没继续 ...

  4. Delphi中预编译指令

    本文转自 http://www.cnblogs.com/JackSun/archive/2010/12/20/1911250.html <Delphi下深入Windows核心编程>(附录A ...

  5. Delphi中stringlist分割字符串的用法

    Delphi中stringlist分割字符串的用法 TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. 常规的用法大家都知道,现在来讨论它的一些高级的用法. 1.CommaT ...

  6. delphi中exit,abort,break,continue 的区别

    from:http://www.cnblogs.com/taofengli288/archive/2011/09/05/2167553.html delphi中表示跳出的有break,continue ...

  7. Delphi中使用比较少的一些语法

    本文是为了加强记忆而写,这里写的大多数内容都是在编程的日常工作中使用频率不高的东西,但是又十分重要. ---Murphy 1,构造和析构函数: a,构造函数: 一般基于TComponent组件的派生类 ...

  8. 如何在 Delphi 中静态链接 SQLite

    搞了我几个小时,终于成功在 Delphi 中静态链接了 SQLite (v3.5.4),下一步就是研究加密了,呵呵中间其实遇到很多问题,今天累了,就不说了,改天补上 下载测试工程 下面说说方法 1.当 ...

  9. 翻箱倒柜,《Delphi中建议使用的语句》

    (*//标题:Delphi中建议使用的语句整理:Zswang连接:http://www.csdn.net/Expert/TopicView1.asp?id=724036日期:2002-06-22支持: ...

随机推荐

  1. java_反射

    反射:reflect   成员属性:Field  成员方法:Method 构造方法:Constructor  类:Class 引用,援引:invoke   新实例:newInstance  Decla ...

  2. 由浅入深讲解责任链模式,理解Tomcat的Filter过滤器

    本文将从简单的场景引入, 逐步优化, 最后给出具体的责任链设计模式实现. 场景引入 首先我们考虑这样一个场景: 论坛上用户要发帖子, 但是用户的想法是丰富多变的, 他们可能正常地发帖, 可能会在网页中 ...

  3. git rebase 合并多次提交.

    一.应用场景 为什么需要合并多个提交呢? 常常一个功能的开发,修修补补 commit 了 n 多次,带来的结果就是提交过多过杂,不够直观,究竟哪些提交是对应这个功能的呢?还有就是,如果我要将这个功能迁 ...

  4. 通过 mysqlbinlog 和 grep 命令定位binlog文件中指定操作

    1.binlog日志基本知识 MySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句select),以事件形式记录,还包含语句所执行的消耗 ...

  5. 监控EXPDP/IMPDP进度

    --获取JOB_NAMEselect * from DBA_DATAPUMP_JOBS;OWNER_NAME JOB_NAME OPERATION JOB_MODE STATE DEGREE ATTA ...

  6. webpack打包nodejs项目(前端代码)

    PS.若本文没有帮到你可以看看我的进阶版点此前往 适用情况 首先说明,此情况不具备普遍性.若你的情况与笔者类似那么希望这篇文章能够帮到你. 我的项目情况是这样的:用node.js做后台,ejs做模板引 ...

  7. 二、使用docker-compose搭建AspNetCore开发环境

    1 使用docker-compose搭建开发环境 我们的目标很简单:使用docker-compose把若干个docker容器组合起来就成了. 首先使用Nginx代理所有的Web程序,这样只需要在主机上 ...

  8. 关于:未能加载文件或程序集“ICSharpCode.SharpZipLib”或它的某一个依赖项异常的解决方案

    问题: 今天项目迁移忽然又个ICSharpCode.SharpZipLib.dll 程序包丢失了,于是我在网上下载一个这样的包,结果程序运行就提示:未能加载文件或程序集“ICSharpCode.Sha ...

  9. DataIntegrityViolationException

    今天出现了这个问题: org.springframework.dao.DataIntegrityViolationException: Could not execute JDBC batch upd ...

  10. Capacitor 新一代混合应用“神器” 会代替Cordova吗??

    1.介绍or畅想 Capacitor是由ionic团队最新开发维护的一个跨平台的应用程序容器,可以轻松构建在iOS,Android,Electron 和 Web 上本机运行的Web应用程序.我们称这些 ...