WMI和WQL学习2014-03-28基础知识:WMI是一项核心的 Windows 管理技术;用户可以使用 WMI 管理本地和远程计算机。WQL就是 WMI 中的查询语言,翻译成中文好像可以成为 Windows 管理规范查询语言。1.如何获取CPU的温度与型号由于视窗本身并无提供各项硬体温度的监控方式,因此WMI虽然是的Windows提供的管理服务,但仍然需要硬体支援才能得到所需的资讯。MSAcpi_ThermalZoneTemperature顾名思义是透过Acpi这个共同管理界面来查询,因此您的系统必须具备Acpi热区才有办法问到,而Acpi热区其实是笔记本电脑设计下的产品,在PC系统下并无Acpi热区的设计。一般在电脑上是使用Win32_TemperatureProbe进行查询,但由于Win32_TemperatureProbe是直接问SMBIOS ,由SMBIOS里面挖出资料,但SMBIOS是否有支援WMI是由主机板厂商决定。也就是说,若主板厂商有支援WMI ,便可以使用Win32_TemperatureProbe的CurrentReading读到CPU溫度。但很不幸的,大多数(几乎可说是全部)的主板厂商都没有支援这项功能。WMI的Windows管理规范提供系统,装置和应用程式资讯,在.NET中提供的System.Management命名空间取得WMI的讯息,以下介绍如何取得CPU的温度与序号。使用ManagementObjectSearcher对象类别,使用前必须先将的System.Management加入引用
private void GetCPUTemperature(){double CPUtprt = 0;System.Management.ManagementObjectSearcher mos= new System.Management.ManagementObjectSearcher(@"rootWMI", "Select * From MSAcpi_ThermalZoneTemperature");foreach (System.Management.ManagementObject mo in mos.Get()){CPUtprt = Convert.ToDouble(Convert.ToDouble(mo.GetPropertyValue("CrrentTemperature").ToString()) - 2732) / 10;label1.Text = "CPU温度:" + CPUtprt.ToString() + "°C
";}}private void GetCPUCode(){ManagementObjectSearcher moSearch = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");foreach (ManagementObject mObject in moSearch.Get()){this.label1.Text+=(mObject["ProcessorId"].ToString());}}
2.WQL知识WQL就是 WMI 中的查询语言,WQL 的全称是 WMI Query Language,简称为 WQL,翻译成中文好像可以成为 Windows 管理规范查询语言。熟悉 SQL 语言的朋友会感觉它和 SQL 非常相似。WQL 其实非常简单,它有如下特点:1、每个 WQL 语句必须以 SELECT 开始;2、SELECT 后跟你需要查询的属性名(我刚才对应 SQL 将其称之为字段名了),也可以像 SQL 一样,以*表示返回所有属性值;3、FROM 关键字;4、你要查询的类的名字;5、另外,如果你想精确查询结果还可以加上 WHERE 条件从句。比如某个类有 Enable 属性,你可以在查询的时候加上 WHERE ENABLE=true。就像这样:SELECT 字段名 FROM 类名如以下的都是正确的 WQL 语句:Select * From Win32_LogicalDisk where drivetype=3 ’‘’‘查询所有硬盘分区SELECT * FROM Win32_share ’‘查询所有共享目录SELECT * FROM Win32_NetworkAdapterConfiguration WHERE DHCPEnabled=TRUESELECT Description FROM Win32_Account WHERE Name="Administrator"SELECT Freespace,DeviceID FROM Win32_LogicalDisk