在很多情况下,你可能都需要得到微机的硬件信息。比如:你想给你的软件加锁,不让别人随便访问。
最有效的办法是获取CPU的序列号,然后让你的软件只能运行在有这样的CPU序列号的机器上。众所周知,CPU序列号是唯一的!因此,这样就可以为你的软件加锁了。
另外一个需要硬盘信息的例子是:硬盘有几个分区,每个分区各有多少剩余空间。当你正在做一个多媒体应用程序的时候,你可能也需要获得有关声卡、显卡的硬件信息。
首先,你必须知道这个应用程序的功能是使用System.Management这个类得到的。因此,你需要加上下面的这句话:
[c-sharp] view plaincopy
- using System.Management;
为了获取硬件信息,你还需要创建一个ManagementObjectSearcher对象。
[c-sharp] view plaincopy
- ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from " + Key);
上面代码的Key是一个将被对应正确的数据填入的值。例如,获取CPU的信息,就需要把Key值设成Win32_Processor。所有Key可能的值,列举如下:
[c-sharp] view plaincopy
- Win32_1394Controller
- Win32_1394ControllerDevice
- Win32_Account
- Win32_AccountSID
- Win32_ACE
- Win32_ActionCheck
- Win32_AllocatedResource
- Win32_ApplicationCommandLine
- Win32_ApplicationService
- Win32_AssociatedBattery
- Win32_AssociatedProcessorMemory
- Win32_BaseBoard
- Win32_BaseService
- Win32_Battery
- Win32_Binary
- Win32_BindImageAction
- Win32_BIOS
- Win32_BootConfiguration
- Win32_Bus
- Win32_CacheMemory
- Win32_CDROMDrive
- Win32_CheckCheck
- Win32_CIMLogicalDeviceCIMDataFile
- Win32_ClassicCOMApplicationClasses
- Win32_ClassicCOMClass
- Win32_ClassicCOMClassSetting
- Win32_ClassicCOMClassSettings
- Win32_ClassInfoAction
- Win32_ClientApplicationSetting
- Win32_CodecFile
- Win32_COMApplication
- Win32_COMApplicationClasses
- Win32_COMApplicationSettings
- Win32_COMClass
- Win32_ComClassAutoEmulator
- Win32_ComClassEmulator
- Win32_CommandLineAccess
- Win32_ComponentCategory
- Win32_ComputerSystem
- Win32_ComputerSystemProcessor
- Win32_ComputerSystemProduct
- Win32_COMSetting
- Win32_Condition
- Win32_CreateFolderAction
- Win32_CurrentProbe
- Win32_DCOMApplication
- Win32_DCOMApplicationAccessAllowedSetting
- Win32_DCOMApplicationLaunchAllowedSetting
- Win32_DCOMApplicationSetting
- Win32_DependentService
- Win32_Desktop
- Win32_DesktopMonitor
- Win32_DeviceBus
- Win32_DeviceMemoryAddress
- Win32_DeviceSettings
- Win32_Directory
- Win32_DirectorySpecification
- Win32_DiskDrive
- Win32_DiskDriveToDiskPartition
- Win32_DiskPartition
- Win32_DisplayConfiguration
- Win32_DisplayControllerConfiguration
- Win32_DMAChannel
- Win32_DriverVXD
- Win32_DuplicateFileAction
- Win32_Environment
- Win32_EnvironmentSpecification
- Win32_ExtensionInfoAction
- Win32_Fan
- Win32_FileSpecification
- Win32_FloppyController
- Win32_FloppyDrive
- Win32_FontInfoAction
- Win32_Group
- Win32_GroupUser
- Win32_HeatPipe
- Win32_IDEController
- Win32_IDEControllerDevice
- Win32_ImplementedCategory
- Win32_InfraredDevice
- Win32_IniFileSpecification
- Win32_InstalledSoftwareElement
- Win32_IRQResource
- Win32_Keyboard
- Win32_LaunchCondition
- Win32_LoadOrderGroup
- Win32_LoadOrderGroupServiceDependencies
- Win32_LoadOrderGroupServiceMembers
- Win32_LogicalDisk
- Win32_LogicalDiskRootDirectory
- Win32_LogicalDiskToPartition
- Win32_LogicalFileAccess
- Win32_LogicalFileAuditing
- Win32_LogicalFileGroup
- Win32_LogicalFileOwner
- Win32_LogicalFileSecuritySetting
- Win32_LogicalMemoryConfiguration
- Win32_LogicalProgramGroup
- Win32_LogicalProgramGroupDirectory
- Win32_LogicalProgramGroupItem
- Win32_LogicalProgramGroupItemDataFile
- Win32_LogicalShareAccess
- Win32_LogicalShareAuditing
- Win32_LogicalShareSecuritySetting
- Win32_ManagedSystemElementResource
- Win32_MemoryArray
- Win32_MemoryArrayLocation
- Win32_MemoryDevice
- Win32_MemoryDeviceArray
- Win32_MemoryDeviceLocation
- Win32_MethodParameterClass
- Win32_MIMEInfoAction
- Win32_MotherboardDevice
- Win32_MoveFileAction
- Win32_MSIResource
- Win32_NetworkAdapter
- Win32_NetworkAdapterConfiguration
- Win32_NetworkAdapterSetting
- Win32_NetworkClient
- Win32_NetworkConnection
- Win32_NetworkLoginProfile
- Win32_NetworkProtocol
- Win32_NTEventlogFile
- Win32_NTLogEvent
- Win32_NTLogEventComputer
- Win32_NTLogEventLog
- Win32_NTLogEventUser
- Win32_ODBCAttribute
- Win32_ODBCDataSourceAttribute
- Win32_ODBCDataSourceSpecification
- Win32_ODBCDriverAttribute
- Win32_ODBCDriverSoftwareElement
- Win32_ODBCDriverSpecification
- Win32_ODBCSourceAttribute
- Win32_ODBCTranslatorSpecification
- Win32_OnBoardDevice
- Win32_OperatingSystem
- Win32_OperatingSystemQFE
- Win32_OSRecoveryConfiguration
- Win32_PageFile
- Win32_PageFileElementSetting
- Win32_PageFileSetting
- Win32_PageFileUsage
- Win32_ParallelPort
- Win32_Patch
- Win32_PatchFile
- Win32_PatchPackage
- Win32_PCMCIAController
- Win32_Perf
- Win32_PerfRawData
- Win32_PerfRawData_ASP_ActiveServerPages
- Win32_PerfRawData_ASPNET_114322_ASPNETAppsv114322
- Win32_PerfRawData_ASPNET_114322_ASPNETv114322
- Win32_PerfRawData_ASPNET_ASPNET
- Win32_PerfRawData_ASPNET_ASPNETApplications
- Win32_PerfRawData_IAS_IASAccountingClients
- Win32_PerfRawData_IAS_IASAccountingServer
- Win32_PerfRawData_IAS_IASAuthenticationClients
- Win32_PerfRawData_IAS_IASAuthenticationServer
- Win32_PerfRawData_InetInfo_InternetInformationServicesGlobal
- Win32_PerfRawData_MSDTC_DistributedTransactionCoordinator
- Win32_PerfRawData_MSFTPSVC_FTPService
- Win32_PerfRawData_MSSQLSERVER_SQLServerAccessMethods
- Win32_PerfRawData_MSSQLSERVER_SQLServerBackupDevice
- Win32_PerfRawData_MSSQLSERVER_SQLServerBufferManager
- Win32_PerfRawData_MSSQLSERVER_SQLServerBufferPartition
- Win32_PerfRawData_MSSQLSERVER_SQLServerCacheManager
- Win32_PerfRawData_MSSQLSERVER_SQLServerDatabases
- Win32_PerfRawData_MSSQLSERVER_SQLServerGeneralStatistics
- Win32_PerfRawData_MSSQLSERVER_SQLServerLatches
- Win32_PerfRawData_MSSQLSERVER_SQLServerLocks
- Win32_PerfRawData_MSSQLSERVER_SQLServerMemoryManager
- Win32_PerfRawData_MSSQLSERVER_SQLServerReplicationAgents
- Win32_PerfRawData_MSSQLSERVER_SQLServerReplicationDist
- Win32_PerfRawData_MSSQLSERVER_SQLServerReplicationLogreader
- Win32_PerfRawData_MSSQLSERVER_SQLServerReplicationMerge
- Win32_PerfRawData_MSSQLSERVER_SQLServerReplicationSnapshot
- Win32_PerfRawData_MSSQLSERVER_SQLServerSQLStatistics
- Win32_PerfRawData_MSSQLSERVER_SQLServerUserSettable
- Win32_PerfRawData_NETFramework_NETCLRExceptions
- Win32_PerfRawData_NETFramework_NETCLRInterop
- Win32_PerfRawData_NETFramework_NETCLRJit
- Win32_PerfRawData_NETFramework_NETCLRLoading
- Win32_PerfRawData_NETFramework_NETCLRLocksAndThreads
- Win32_PerfRawData_NETFramework_NETCLRMemory
- Win32_PerfRawData_NETFramework_NETCLRRemoting
- Win32_PerfRawData_NETFramework_NETCLRSecurity
- Win32_PerfRawData_Outlook_Outlook
- 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_RemoteAccess_RASPort
- Win32_PerfRawData_RemoteAccess_RASTotal
- Win32_PerfRawData_RSVP_ACSPerRSVPService
- 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_W3SVC_WebService
- Win32_PhysicalMemory
- Win32_PhysicalMemoryArray
- Win32_PhysicalMemoryLocation
- Win32_PNPAllocatedResource
- Win32_PnPDevice
- Win32_PnPEntity
- Win32_PointingDevice
- Win32_PortableBattery
- Win32_PortConnector
- Win32_PortResource
- Win32_POTSModem
- Win32_POTSModemToSerialPort
- Win32_PowerManagementEvent
- Win32_Printer
- Win32_PrinterConfiguration
- Win32_PrinterController
- Win32_PrinterDriverDll
- Win32_PrinterSetting
- Win32_PrinterShare
- Win32_PrintJob
- Win32_PrivilegesStatus
- Win32_Process
- Win32_Processor
- Win32_ProcessStartup
- Win32_Product
- Win32_ProductCheck
- Win32_ProductResource
- Win32_ProductSoftwareFeatures
- Win32_ProgIDSpecification
- Win32_ProgramGroup
- Win32_ProgramGroupContents
- Win32_ProgramGroupOrItem
- Win32_Property
- Win32_ProtocolBinding
- Win32_PublishComponentAction
- Win32_QuickFixEngineering
- Win32_Refrigeration
- Win32_Registry
- Win32_RegistryAction
- Win32_RemoveFileAction
- Win32_RemoveIniAction
- Win32_ReserveCost
- Win32_ScheduledJob
- Win32_SCSIController
- Win32_SCSIControllerDevice
- Win32_SecurityDescriptor
- Win32_SecuritySetting
- Win32_SecuritySettingAccess
- Win32_SecuritySettingAuditing
- Win32_SecuritySettingGroup
- Win32_SecuritySettingOfLogicalFile
- Win32_SecuritySettingOfLogicalShare
- Win32_SecuritySettingOfObject
- Win32_SecuritySettingOwner
- Win32_SelfRegModuleAction
- Win32_SerialPort
- Win32_SerialPortConfiguration
- Win32_SerialPortSetting
- Win32_Service
- Win32_ServiceControl
- Win32_ServiceSpecification
- Win32_ServiceSpecificationService
- Win32_SettingCheck
- Win32_Share
- Win32_ShareToDirectory
- Win32_ShortcutAction
- Win32_ShortcutFile
- Win32_ShortcutSAP
- Win32_SID
- Win32_SMBIOSMemory
- Win32_SoftwareElement
- Win32_SoftwareElementAction
- Win32_SoftwareElementCheck
- Win32_SoftwareElementCondition
- Win32_SoftwareElementResource
- Win32_SoftwareFeature
- Win32_SoftwareFeatureAction
- Win32_SoftwareFeatureCheck
- Win32_SoftwareFeatureParent
- Win32_SoftwareFeatureSoftwareElements
- Win32_SoundDevice
- Win32_StartupCommand
- Win32_SubDirectory
- Win32_SystemAccount
- Win32_SystemBIOS
- Win32_SystemBootConfiguration
- Win32_SystemDesktop
- Win32_SystemDevices
- Win32_SystemDriver
- Win32_SystemDriverPNPEntity
- Win32_SystemEnclosure
- Win32_SystemLoadOrderGroups
- Win32_SystemLogicalMemoryConfiguration
- Win32_SystemMemoryResource
- Win32_SystemNetworkConnections
- Win32_SystemOperatingSystem
- Win32_SystemPartitions
- Win32_SystemProcesses
- Win32_SystemProgramGroups
- Win32_SystemResources
- Win32_SystemServices
- Win32_SystemSetting
- Win32_SystemSlot
- Win32_SystemSystemDriver
- Win32_SystemTimeZone
- Win32_SystemUsers
- Win32_TapeDrive
- Win32_TemperatureProbe
- Win32_Thread
- Win32_TimeZone
- Win32_Trustee
- Win32_TypeLibraryAction
- Win32_UninterruptiblePowerSupply
- Win32_USBController
- Win32_USBControllerDevice
- Win32_UserAccount
- Win32_UserDesktop
- Win32_VideoConfiguration
- Win32_VideoController
- Win32_VideoSettings
- Win32_VoltageProbe
- Win32_WMIElementSetting
- Win32_WMISetting
首先,调用ManagementObjectSearcher实例(在本文中的例子里为searcher )中的Get()方法,该方法将会把返回信息填在这个实例中。然后,你所要做的就是处理这个实例searcher中的数据。
[c-sharp] view plaincopy
- foreach (ManagementObject share in searcher.Get())
- {
- // Some Codes ...
- }
每个ManagementObject的对象中都有一些,我们所需要的数据,当然我们可以接着这么处理这些数据:
[c-sharp] view plaincopy
- foreach (PropertyData PC in share.Properties)
- {
- //some codes ...
- }
源代码:
[c-sharp] view plaincopy
- using System;
- using System.Management; // 添加System.Management引用
- public class Computer
- {
- public string CpuID; //CPU序列号
- public string MacAddress; //网卡地址
- public string DiskID; //硬盘序列号
- public string MotherBoardID; //主板序列号
- public string IpAddress; //IP地址
- public string LoginUserName; //系统登录名
- public string ComputerName; //计算机名称
- public string SystemType; //操作系统
- public string TotalPhysicalMemory;//内存大小,单位:M
- private static Computer _instance;
- public static Computer Instance()
- {
- if (_instance == null)
- _instance = new Computer();
- return _instance;
- }
- /// <summary>
- /// 构造函数
- /// </summary>
- public Computer()
- {
- CpuID = GetCpuID();
- MacAddress = GetMacAddress();
- DiskID = GetDiskID();
- MotherBoardID = GetMotherBoardSerialNumber();
- IpAddress = GetIPAddress();
- LoginUserName = GetUserName();
- SystemType = GetSystemType();
- TotalPhysicalMemory = GetTotalPhysicalMemory();
- ComputerName = GetComputerName();
- }
- /// <summary>
- /// 获取cpu序列号
- /// </summary>
- /// <returns></returns>
- private string GetCpuID()
- {
- try
- {
- //获取CPU序列号代码
- string cpuInfo = "";//cpu序列号
- ManagementClass mc = new ManagementClass("Win32_Processor");
- ManagementObjectCollection moc = mc.GetInstances();
- foreach (ManagementObject mo in moc)
- {
- cpuInfo = mo.Properties["ProcessorId"].Value.ToString();
- }
- moc = null;
- mc = null;
- return cpuInfo;
- }
- catch
- {
- return "unknow";
- }
- }
- /// <summary>
- /// 获取网卡硬件地址
- /// </summary>
- /// <returns></returns>
- private string GetMacAddress()
- {
- try
- {
- //获取网卡硬件地址
- string mac = "";
- ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
- ManagementObjectCollection moc = mc.GetInstances();
- foreach (ManagementObject mo in moc)
- {
- if ((bool)mo["IPEnabled"] == true)
- {
- mac = mo["MacAddress"].ToString();
- break;
- }
- }
- moc = null;
- mc = null;
- return mac;
- }
- catch
- {
- return "unknow";
- }
- }
- /// <summary>
- /// 获取IP地址
- /// </summary>
- /// <returns></returns>
- private string GetIPAddress()
- {
- try
- {
- //获取IP地址
- string st = "";
- ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
- ManagementObjectCollection moc = mc.GetInstances();
- foreach (ManagementObject mo in moc)
- {
- if ((bool)mo["IPEnabled"] == true)
- {
- //st=mo["IpAddress"].ToString();
- System.Array ar;
- ar = (System.Array)(mo.Properties["IpAddress"].Value);
- st = ar.GetValue(0).ToString();
- break;
- }
- }
- moc = null;
- mc = null;
- return st;
- }
- catch
- {
- return "unknow";
- }
- }
- /// <summary>
- /// 获取主板序号
- /// </summary>
- /// <returns></returns>
- private string GetMotherBoardSerialNumber()
- {
- try
- {
- //获取主板序号代码
- string motherbordInfo = "";//主板序列号
- ManagementClass mc = new ManagementClass("WIN32_BaseBoard");
- ManagementObjectCollection moc = mc.GetInstances();
- foreach (ManagementObject mo in moc)
- {
- motherbordInfo = mo.Properties["SerialNumber"].Value.ToString();
- }
- moc = null;
- mc = null;
- return motherbordInfo;
- }
- catch
- {
- return "unknow";
- }
- }
- /// <summary>
- /// 获取硬盘ID
- /// </summary>
- /// <returns></returns>
- private string GetDiskID()
- {
- try
- {
- //获取硬盘ID
- String HDid = "";
- ManagementClass mc = new ManagementClass("Win32_DiskDrive");
- ManagementObjectCollection moc = mc.GetInstances();
- foreach (ManagementObject mo in moc)
- {
- HDid = (string)mo.Properties["Model"].Value;
- }
- moc = null;
- mc = null;
- return HDid;
- }
- catch
- {
- return "unknow";
- }
- }
- /// <summary>
- /// 操作系统的登录用户名
- /// </summary>
- /// <returns></returns>
- private string GetUserName()
- {
- try
- {
- string st = "";
- ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
- ManagementObjectCollection moc = mc.GetInstances();
- foreach (ManagementObject mo in moc)
- {
- st = mo["UserName"].ToString();
- }
- moc = null;
- mc = null;
- return st;
- }
- catch
- {
- return "unknow";
- }
- }
- /// <summary>
- /// PC类型
- /// </summary>
- /// <returns></returns>
- private string GetSystemType()
- {
- try
- {
- string st = "";
- ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
- ManagementObjectCollection moc = mc.GetInstances();
- foreach (ManagementObject mo in moc)
- {
- st = mo["SystemType"].ToString();
- }
- moc = null;
- mc = null;
- return st;
- }
- catch
- {
- return "unknow";
- }
- }
- /// <summary>
- /// 物理内存
- /// </summary>
- /// <returns></returns>
- private string GetTotalPhysicalMemory()
- {
- try
- {
- string st = "";
- ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
- ManagementObjectCollection moc = mc.GetInstances();
- foreach (ManagementObject mo in moc)
- {
- st = mo["TotalPhysicalMemory"].ToString();
- }
- moc = null;
- mc = null;
- return st;
- }
- catch
- {
- return "unknow";
- }
- }
- /// <summary>
- /// 电脑名称
- /// </summary>
- /// <returns></returns>
- private string GetComputerName()
- {
- try
- {
- return System.Environment.GetEnvironmentVariable("ComputerName");
- }
- catch
- {
- return "unknow";
- }
- }
- }