如何用.net“透视”计算机
——引言篇
在MFC那个时代,我们可以用WMI来查看Window资源。WMI 最初于1998年作为一个附加组件与 Windows NT 4.0 Service Pack 4 一起发行,是内置在Windows 2000、 Windows XP和Windows Server 2003 系列操作系统中核心的管理支持技术。基于由 Distributed Management Task Force (DMTF) 所监督的业界标准,WMI是一种规范和基础结构,通过它可以访问、配置、管理和监视几乎所有的Windows资源。它替代了通过 Win32应用程序编程接口(Application ProgrammingInterfaces,API)来访问和管理Windows资源的方式。
在.net 开发环境中,同样提供了许多可以访问Window资源的类。大家比较熟悉的可能是System.Environment这个类,使用 Environment 类可检索信息,如命令行参数、退出代码、环境变量设置、调用堆栈的内容、上次系统引导以来的时间,以及公共语言运行库的版本。
常用的属性有:
Environment.MachineName,获取此本地计算机的 NetBIOS 名称,如“Hi4-Kevin-Zou”。
Environment.CurrentDirectory,获取和设置当前目录(即该进程从中启动的目录)的完全限定路径。
Environment.OSVersion, 获取包含当前平台标识符和版本号的 OperatingSystem 对象。OperatingSystem 对象提供的两个重要属性:Platform 获取标识此操作
系统平台的 PlatformID 值。Version 获取标识此操作系统的 Version 对象
Environment.UserDomainName 获取与当前用户关联的网络域名。
Environment.UserName 获取启动当前线程的人的用户名。
Environment.Version 获取一个 Version 对象,该对象描述公共语言运行库的主版本、次版本、内部版本和修订号。
常用的方法:
public static string GetEnvironmentVariable( string variable); variable 包含环境变量名的字符串。 功能:返回指定环境变量的值。
public static string[] GetLogicalDrives(); 返回值 字符串数组,其中的每个元素都包含逻辑驱动器名称。例如,如果计算机的硬盘是第一个逻辑驱动器,则返
回的第一个元素是“C:"”。
这些是比较常用,也是比较简单的使用。您可能觉得功能不够强大,那么在System.Management命名空间下,正有一堆超级武器等着你去使用呢。System.Management命名空间的类、委托、枚举提供对大量管理信息和管理事件集合的访问,这些信息和事件是与根据 Windows 管理规范 (WMI) 结构对系统、设备和应用程序设置检测点有关的。应用程序和服务可以使用从 ManagementObjectSearcher 和 ManagementQuery 派生的类,查询感兴趣的管理信息(例如在磁盘上还剩多少可用空间、当前 CPU 利用率是多少、某一应用程序正连接到哪一数据库等等);或者应用程序和服务可以使用 ManagementEventWatcher 类预订各种管理事件。这些可访问的数据可以来自分布式环境中托管的和非托管的组件。
这些类足够能完成你想要的一切对Window资源的访问。这些类非常丰富,丰富到不可能一个个尝试过来,有兴趣的同仁可以使用以下。下面就对笔者用过的一个类 ManagementObject 简单介绍一下。在MSDN上,对其功能的官方表述为:表示数据管理对象。呵呵,这个等于什么都没说。认识这个类之前,还得介绍一下它的一位好搭档。
public ManagementObject(string) ——这是它的一个重载构造函数,也是网上搜索时见到较多的方式。先看一个实例化 ManagementObject disk = new ManagementObject( "win32_logicaldisk.deviceid=""c:""您也许要问,这个win32_logicaldisk是什么呢?如果熟悉WMI,就能猜到这是一个WMI class。不熟悉WMI 没问题(其实我一点不懂),只要传给它指定位置,就能获得你想要的值了。刚才构造函数传递的值,其实是告诉win32_logicaldisk,我要的知道的对象是C盘。现在这个disk就是关于C盘的ManagementObject对象。再做这样一个这样的操作:
string totalByte = diskMonitor["Size"].ToString();
ulong totalDiskSpaceMb = Convert.ToUInt64(totalByte);
return totalDiskSpaceMb;
便可取到Size对应的C盘容量了。win32_logicaldisk类是有关磁盘信息的,共有40多个参数,ManagementObject类的强大其实完全是依靠win32_logicaldisk,因为ManagementObject其实只是对WMI的一点封装而已。来看下win32_logicaldisk的一些重要属性:
DriveType 返回类型:uint32 以数字表示逻辑磁盘的磁盘类型:
0 Unknown
1 No Root Directory
2 Removable Disk
3 Local Disk
4 Network Drive
5 Compact Disc
6 RAM Disk
FileSystem 返回类型:string 便是磁盘上文件系统,就是我们熟知的NTFS,FAT32等格式。
FreeSpace 返回类型:uint64 磁盘剩余空间。
InstallDate 返回类型:datetime 返回磁盘对象建立的日期和时间。
Size 返回类型:uint64:磁盘大小。
StatusInfo 返回类型:uint16 当前磁盘的状态
1 Other
2 Unknown
3 Enabled
4 Disabled
5 Not Applicable
同类型的实在太多了,所有类都可以在MSDN的Windows Management Instrumentation SDK 找到。
下面附一位牛人整理的各类型WMI class
降温设备
Win32_Fan
Win32_HeatPipe
Win32_Refrigeration
Win32_TemperatureProbe
输入设备
Win32_Keyboard
Win32_PointingDevice
存储设备
Win32_AutochkSetting
Win32_CDROMDrive
Win32_DiskDrive
Win32_FloppyDrive
Win32_LogicalDisk
Win32_MappedLogicalDisk
Win32_TapeDrive
主板控制器及端口
Win32_1394Controller
Win32_1394ControllerDevice
Win32_AllocatedResource
Win32_AssociatedProcessorMemory
Win32_BaseBoard
Win32_BIOS
Win32_Bus
Win32_CacheMemory
Win32_ControllerHasHub
Win32_DeviceBus
Win32_DeviceMemoryAddress
Win32_DeviceSettings
Win32_DMAChannel
Win32_FloppyController
Win32_IDEController
Win32_IDEControllerDevice
Win32_InfraredDevice
Win32_IRQResource
Win32_MemoryArray
Win32_MemoryArrayLocation
Win32_MemoryDevice
Win32_MemoryDeviceArray
Win32_MemoryDeviceLocation
Win32_MotherboardDevice
Win32_OnBoardDevice
Win32_ParallelPort
Win32_PCMCIAController
Win32_PhysicalMemory
Win32_PhysicalMemoryArray
Win32_PhysicalMemoryLocation
Win32_PNPAllocatedResource
Win32_PNPDevice
Win32_PNPEntity
Win32_PortConnector
Win32_PortResource
Win32_Processor
Win32_SCSIController
Win32_SCSIControllerDevice
Win32_SerialPort
Win32_SerialPortConfiguration
Win32_SerialPortSetting
Win32_SMBIOSMemory
Win32_SoundDevice
Win32_SystemBIOS
Win32_SystemDriverPNPEntity
Win32_SystemEnclosure
Win32_SystemMemoryResource
Win32_SystemSlot
Win32_USBController
Win32_USBControllerDevice
Win32_USBHub
网络设备
Win32_NetworkAdapter
Win32_NetworkAdapterConfiguration
Win32_NetworkAdapterSetting
电源
Win32_Battery
Win32_CurrentProbe
Win32_PortableBattery
Win32_PowerManagementEvent
Win32_UninterruptiblePowerSupply
Win32_VoltageProbe
打印设备
Win32_DriverForDevice
Win32_Printer
Win32_PrinterConfiguration
Win32_PrinterController
Win32_PrinterDriver
Win32_PrinterDriverDll
Win32_PrinterSetting
Win32_PrintJob
Win32_TCPIPPrinterPort
电话设备
Win32_POTSModem
Win32_POTSModemToSerialPort
视频和监视器
Win32_DesktopMonitor
Win32_DisplayConfiguration
Win32_DisplayControllerConfiguration
Win32_VideoConfiguration
Win32_VideoController
Win32_VideoSettings
软件操作系统
组件
Win32_ClassicCOMApplicationClasses
Win32_ClassicCOMClass
Win32_ClassicCOMClassSettings
Win32_ClientApplicationSetting
Win32_COMApplication
Win32_COMApplicationClasses
Win32_COMApplicationSettings
Win32_COMClass
Win32_ComClassAutoEmulator
Win32_ComClassEmulator
Win32_ComponentCategory
Win32_COMSetting
Win32_DCOMApplication
Win32_DCOMApplicationAccessAllowedSetting
Win32_DCOMApplicationLaunchAllowedSetting
Win32_DCOMApplicationSetting
Win32_ImplementedCategory
桌面
Win32_Desktop
Win32_Environment
Win32_TimeZone
Win32_UserDesktop
驱动
Win32_DriverVXD
Win32_SystemDriver
文件系统
Win32_CIMLogicalDeviceCIMDataFile
Win32_Directory
Win32_DirectorySpecification
Win32_DiskDriveToDiskPartition
Win32_DiskPartition
Win32_DiskQuota
Win32_LogicalDiskRootDirectory
Win32_LogicalDiskToPartition
Win32_OperatingSystemAutochkSetting
Win32_QuotaSetting
Win32_ShortcutFile
Win32_SubDirectory
Win32_SystemPartitions
Win32_VolumeQuotaSetting
工作对象
Win32_CollectionStatistics
Win32_LUID
Win32_LUIDandAttributes
Win32_NamedJobObject
Win32_NamedJobObjectActgInfo
Win32_NamedJobObjectLimit
Win32_NamedJobObjectLimitSetting
Win32_NamedJobObjectProcess
Win32_NamedJobObjectSecLimit
Win32_NamedJobObjectSecLimitSetting
Win32_NamedJobObjectStatistics
Win32_SIDandAttributes
Win32_TokenGroups
Win32_TokenPrivileges
内存和页面
Win32_LogicalMemoryConfiguration
Win32_PageFile
Win32_PageFileElementSetting
Win32_PageFileSetting
Win32_PageFileUsage
Win32_SystemLogicalMemoryConfiguration
媒体和音频
Win32_CodecFile
网络
Win32_ActiveRoute
Win32_IP4PersistedRouteTable
Win32_IP4RouteTable
Win32_IP4RouteTableEvent
Win32_NetworkClient
Win32_NetworkConnection
Win32_NetworkProtocol
Win32_NTDomain
Win32_PingStatus
Win32_ProtocolBinding
操作系统事件
Win32_ComputerShutdownEvent
Win32_ComputerSystemEvent
NWin32_DeviceChangeEvent
Win32_ModuleLoadTrace
Win32_ModuleTrace
Win32_ProcessStartTrace
Win32_ProcessStopTrace
Win32_ProcessTrace
Win32_SystemConfigurationChangeEvent
Win32_SystemTrace
Win32_ThreadStartTrace
Win32_ThreadStopTrace
Win32_ThreadTrace
Win32_VolumeChangeEvent
操作系统设置
Win32_BootConfiguration
Win32_ComputerSystem
Win32_ComputerSystemProcessor
Win32_ComputerSystemProduct
Win32_DependentService
Win32_LoadOrderGroup
Win32_LoadOrderGroupServiceDependencies
Win32_LoadOrderGroupServiceMembers
Win32_OperatingSystem
Win32_OperatingSystemQFE
Win32_OSRecoveryConfiguration
Win32_QuickFixEngineering
Win32_StartupCommand
Win32_SystemBootConfiguration
Win32_SystemDesktop
Win32_SystemDevices
Win32_SystemLoadOrderGroups
Win32_SystemNetworkConnections
Win32_SystemOperatingSystem
Win32_SystemProcesses
Win32_SystemProgramGroups
Win32_SystemResources
Win32_SystemServices
Win32_SystemSetting
Win32_SystemSystemDriver
Win32_SystemTimeZone
Win32_SystemUsers
进程
Win32_Process
Win32_ProcessStartup
Win32_Thread
注册表
Win32_Registry
计划任务
Win32_CurrentTime
Win32_ScheduledJob
安全
NWin32_AccountSID
Win32_ACE
Win32_LogicalFileAccess
Win32_LogicalFileAuditing
Win32_LogicalFileGroup
Win32_LogicalFileOwner
Win32_LogicalFileSecuritySetting
Win32_LogicalShareAccess
Win32_LogicalShareAuditing
Win32_LogicalShareSecuritySetting
NWin32_PrivilegesStatus
NWin32_SecurityDescriptor
Win32_SecuritySetting
Win32_SecuritySettingAccess
Win32_SecuritySettingAuditing
Win32_SecuritySettingGroup
Win32_SecuritySettingOfLogicalFile
NodWin32_SecuritySettingOfLogicalShare
Win32_SecuritySettingOfObject
Win32_SecuritySettingOwner
Win32_SID
Win32_Trustee
服务
Win32_BaseService
Win32_Service
共享
Win32_ServerConnection
Win32_ServerSession
Win32_ConnectionShare
Win32_PrinterShare
Win32_SessionConnection
Win32_SessionProcess
Win32_ShareToDirectory
Win32_Share
开始菜单
NoWin32_LogicalProgramGroup
Win32_LogicalProgramGroupDirectory
Win32_LogicalProgramGroupItem
Win32_LogicalProgramGroupItemDataFile
Win32_ProgramGroup
Win32_ProgramGroupContents
Win32_ProgramGroupOrItem
用户
Win32_Account
Win32_Group
Win32_GroupInDomain
Win32_GroupUser
Win32_LogonSession
Win32_LogonSessionMappedDisk
Win32_NetworkLoginProfile
Win32_SystemAccount
Win32_UserAccount
Win32_UserInDomain
Windows事件日志
Win32_NTEventlogFile
Win32_NTLogEvent
Win32_NTLogEventComputer
Win32_NTLogEventLog
Win32_NTLogEventUser
Windows产品激活
Win32_ComputerSystemWindowsProductActivationSetting
Win32_Proxy
Win32_WindowsProductActivation
应用程序安装
Win32_ActionCheck
Win32_ApplicationCommandLine
Win32_ApplicationService
Win32_Binary
Win32_BindImageAction
Win32_CheckCheck
Win32_ClassInfoAction
Win32_CommandLineAccess
Win32_Condition
Win32_CreateFolderAction
Win32_DuplicateFileAction
Win32_EnvironmentSpecification
Win32_ExtensionInfoAction
Win32_FileSpecification
Win32_FontInfoAction
Win32_IniFileSpecification
Win32_InstalledSoftwareElement
Win32_LaunchCondition
Win32_ManagedSystemElementResource
Win32_MIMEInfoAction
Win32_MoveFileAction
Win32_MSIResource
Win32_ODBCAttribute
Win32_ODBCDataSourceAttribute
Win32_ODBCDataSourceSpecification
Win32_ODBCDriverAttribute
Win32_ODBCDriverSoftwareElement
Win32_ODBCDriverSpecification
Win32_ODBCSourceAttribute
Win32_ODBCTranslatorSpecification
Win32_Patch
Win32_PatchFile
Win32_PatchPackage
Win32_Product
Win32_ProductCheck
Win32_ProductResource
Win32_ProductSoftwareFeatures
Win32_ProgIDSpecification
Win32_Property
Win32_PublishComponentAction
Win32_RegistryAction
Win32_RemoveFileAction
Win32_RemoveIniAction
Win32_ReserveCost
Win32_SelfRegModuleAction
Win32_ServiceControl
Win32_ServiceSpecification
Win32_ServiceSpecificationService
Win32_SettingCheck
Win32_ShortcutAction
Win32_ShortcutSAP
Win32_SoftwareElement
Win32_SoftwareElementAction
Win32_SoftwareElementCheck
Win32_SoftwareElementCondition
Win32_SoftwareElementResource
Win32_SoftwareFeature
Win32_SoftwareFeatureAction
Win32_SoftwareFeatureCheck
Win32_SoftwareFeatureParent
Win32_SoftwareFeatureSoftwareElements
Win32_TypeLibraryAction
WMI服务管理
WMI设置
Win32_MethodParameterClass
WMI管理
Win32_WMISetting
Win32_WMIElementSetting
性能计数器
Win32_PerfFormattedData
Win32_PerfFormattedData_ASP_ActiveServerPages
Win32_PerfFormattedData_ContentFilter_IndexingServiceFilter
Win32_PerfFormattedData_ContentIndex_IndexingService
Win32_PerfFormattedData_InetInfo_InternetInformationServicesGlobal
Win32_PerfFormattedData_ISAPISearch_HttpIndexingService
Win32_PerfFormattedData_MSDTC_DistributedTransactionCoordinator
Win32_PerfFormattedData_NTFSDRV_SMTPNTFSStoreDriver
Win32_PerfFormattedData_PerfDisk_LogicalDisk
Win32_PerfFormattedData_PerfDisk_PhysicalDisk
Win32_PerfFormattedData_PerfNet_Browser
Win32_PerfFormattedData_PerfNet_Redirector
Win32_PerfFormattedData_PerfNet_Server
Win32_PerfFormattedData_PerfNet_ServerWorkQueues
Win32_PerfFormattedData_PerfOS_Cache
Win32_PerfFormattedData_PerfOS_Memory
Win32_PerfFormattedData_PerfOS_Objects
Win32_PerfFormattedData_PerfOS_PagingFile
Win32_PerfFormattedData_PerfOS_Processor
Win32_PerfFormattedData_PerfOS_System
Win32_PerfFormattedData_PerfProc_FullImage_Costly
Win32_PerfFormattedData_PerfProc_Image_Costly
Win32_PerfFormattedData_PerfProc_JobObject
Win32_PerfFormattedData_PerfProc_JobObjectDetails
Win32_PerfFormattedData_PerfProc_Process
Win32_PerfFormattedData_PerfProc_ProcessAddressSpace_Costly
Win32_PerfFormattedData_PerfProc_Thread
Win32_PerfFormattedData_PerfProc_ThreadDetails_Costly
Win32_PerfFormattedData_PSched_PSchedFlow
Win32_PerfFormattedData_PSched_PSchedPipe
Win32_PerfFormattedData_RemoteAccess_RASPort
Win32_PerfFormattedData_RemoteAccess_RASTotal
Win32_PerfFormattedData_RSVP_ACSRSVPInterfaces
Win32_PerfFormattedData_RSVP_ACSRSVPService
Win32_PerfFormattedData_SMTPSVC_SMTPServer
Win32_PerfFormattedData_Spooler_PrintQueue
Win32_PerfFormattedData_TapiSrv_Telephony
Win32_PerfFormattedData_Tcpip_ICMP
Win32_PerfFormattedData_Tcpip_IP
Win32_PerfFormattedData_Tcpip_NBTConnection
Win32_PerfFormattedData_Tcpip_NetworkInterface
Win32_PerfFormattedData_Tcpip_TCP
Win32_PerfFormattedData_Tcpip_UDP
Win32_PerfFormattedData_TermService_TerminalServices
Win32_PerfFormattedData_TermService_TerminalServicesSession
Win32_PerfFormattedData_W3SVC_WebService
原始性能计数
Win32_PerfRawData
Win32_PerfRawData_ASP_ActiveServerPages
Win32_PerfRawData_ContentFilter_IndexingServiceFilter
Win32_PerfRawData_ContentIndex_IndexingService
Win32_PerfRawData_InetInfo_InternetInformationServicesGlobal
Win32_PerfRawData_ISAPISearch_HttpIndexingService
Win32_PerfRawData_MSDTC_DistributedTransactionCoordinator
Win32_PerfRawData_NTFSDRV_SMTPNTFSStoreDriver
Win32_PerfRawData_PerfDisk_LogicalDisk
Win32_PerfRawData_PerfDisk_PhysicalDisk
Win32_PerfRawData_PerfNet_Browser
Win32_PerfRawData_PerfNet_Redirector
Win32_PerfRawData_PerfNet_Server
Win32_PerfRawData_PerfNet_ServerWorkQueues
Win32_PerfRawData_PerfOS_Cache
Win32_PerfRawData_PerfOS_Memory
Win32_PerfRawData_PerfOS_Objects
Win32_PerfRawData_PerfOS_PagingFile
Win32_PerfRawData_PerfOS_Processor
Win32_PerfRawData_PerfOS_System
Win32_PerfRawData_PerfProc_FullImage_Costly
Win32_PerfRawData_PerfProc_Image_Costly
Win32_PerfRawData_PerfProc_JobObject
Win32_PerfRawData_PerfProc_JobObjectDetails
Win32_PerfRawData_PerfProc_Process
Win32_PerfRawData_PerfProc_ProcessAddressSpace_Costly
Win32_PerfRawData_PerfProc_Thread
Win32_PerfRawData_PerfProc_ThreadDetails_Costly
Win32_PerfRawData_PSched_PSchedFlow
NWin32_PerfRawData_PSched_PSchedPipe
Win32_PerfRawData_RemoteAccess_RASPort
Win32_PerfRawData_RemoteAccess_RASTotal
Win32_PerfRawData_RSVP_ACSRSVPInterfaces
Win32_PerfRawData_RSVP_ACSRSVPService
Win32_PerfRawData_SMTPSVC_SMTPServer
Win32_PerfRawData_Spooler_PrintQueue
Win32_PerfRawData_TapiSrv_Telephony
Win32_PerfRawData_Tcpip_ICMP
Win32_PerfRawData_Tcpip_IP
Win32_PerfRawData_Tcpip_NBTConnection
Win32_PerfRawData_Tcpip_NetworkInterface
Win32_PerfRawData_Tcpip_TCP
Win32_PerfRawData_Tcpip_UDP
Win32_PerfRawData_TermService_TerminalServices
Win32_PerfRawData_TermService_TerminalServicesSession
Win32_PerfRawData_W3SVC_WebService