奇怪的工作,制作的是一款办公应用软件,领导却要求我统计用户计算机的物理信息,什么CPU的型号、核心数,什么内存信息等各种乱七八糟的用户信息。我想问,现在用户的信息就这么没有隐私性了么?想获取就获取传递到后台……无奈我只是民工,还是老老实实做了。然后查阅了一些资料,主要用到了System.Management命名空间下的信息(System.Management 命名空间 | Microsoft Docs)。
1、引用
在查询计算机硬件或者操作系统的信息时,使用ManagementObjectSearcher类或者ManagementClass类,其在在System.Management
命名空间下,需要添加对System.Management
的引用。
在日常的编程中,我们可以通过Environment获得一些简单的系统信息,如获得操作系统登录用户名:Environment.UserName。 但更多、复杂的信息并不能获得。
2、用法
下面两部分代码分别演示获取操作系统信息:
1、使用ManagementObjectSearcher类
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_OperatingSystem");//注意查询的类型 from * ManagementObjectSearcher searcher =new ManagementObjectSearcher(query);//也可以直接将查询字符串写入这个构造函数中 ManagementObjectCollection queryCollection = searcher.Get(); foreach (ManagementObject m in queryCollection) { Console.WriteLine("Computer Name : {0}", m["csname"]); Console.WriteLine("Windows Directory : {0}", m["WindowsDirectory"]); Console.WriteLine("Operating System: {0}", m["Caption"]); Console.WriteLine("Version: {0}", m["Version"]); Console.WriteLine("Manufacturer : {0}", m["Manufacturer"]); }
2、使用ManagementClass类
ManagementClass mc = new ManagementClass("Win32_OperatingSystem");//填入需要查询的类型 ManagementObjectCollection queryCollection = mc.GetInstances(); foreach (ManagementObject m in queryCollection) { Console.WriteLine("Computer Name : {0}", m["csname"]); Console.WriteLine("Windows Directory : {0}", m["WindowsDirectory"]); Console.WriteLine("Operating System: {0}", m["Caption"]); Console.WriteLine("Version: {0}", m["Version"]); Console.WriteLine("Manufacturer : {0}", m["Manufacturer"]); }
如果不知道要获取的属性名称,可以循环遍历打印出来(注意获取值的方式有两种)。
ManagementClass mc = new ManagementClass("Win32_OperatingSystem");//填入需要查询的类型 ManagementObjectCollection moc = mc.GetInstances(); foreach (ManagementObject mo in moc) { foreach (PropertyData pd in mo.Properties) { if (mo[pd.Name] != null && mo[pd.Name].ToString() != "") { Console.WriteLine(string.Format("{0}:{1}", pd.Name, mo.GetPropertyValue(pd.Name))); } } }
3、示例
以生成注册码为例,注册码使用CPU的序列号和C盘的序列号为基准:
/// <summary> /// 获取CPU序列号 /// </summary> /// <returns></returns> private string GetCpuNum() { ManagementClass mc = new ManagementClass("Win32_Processor");//填入需要查询的类型 ManagementObjectCollection queryCollection = mc.GetInstances(); foreach (ManagementObject m in queryCollection) { return m.GetPropertyValue("Processorid").ToString(); } return string.Empty; } /// <summary> /// 取得设备硬盘的卷标号 /// </summary> /// <returns></returns> private Dictionary<string,string> GetDiskVolumeSerialNumber() { Dictionary<string, string> keyValuePairs = new Dictionary<string, string>(); ManagementClass mc = new ManagementClass("Win32_LogicalDisk");//填入需要查询的类型 ManagementObjectCollection queryCollection = mc.GetInstances(); foreach (ManagementObject mo in queryCollection) { keyValuePairs.Add(mo.GetPropertyValue("DeviceID").ToString().Trim(':'), mo.GetPropertyValue("VolumeSerialNumber").ToString()); } return keyValuePairs; } ///<summary> ///生成注册码 ///</summary> ///<returns></returns> public string GetRegCode() { int[] intCode = new int[127];//存储密钥 int[] intNumber = new int[25];//存机器码的Ascii值 char[] Charcode = new char[25];//存储机器码字 //初始化127位数组 for (int i = 1; i < intCode.Length; i++) { intCode[i] = i % 9; } string cpuNum = GetCpuNum(); string diskSerialNumber = GetDiskVolumeSerialNumber()["C"]; string strNum = cpuNum + diskSerialNumber;//生成机器码 string MNum = strNum.Substring(0, 24);//从生成的字符串中取出前24个字符做为机器码 for (int i = 1; i < Charcode.Length; i++)//把机器码存入数组中 { Charcode[i] = Convert.ToChar(MNum.Substring(i - 1, 1)); } for (int j = 1; j < intNumber.Length; j++)//把字符的ASCII值存入一个整数组中。 { intNumber[j] = intCode[Convert.ToInt32(Charcode[j])] + Convert.ToInt32(Charcode[j]); } string strAsciiName = "";//用于存储注册码 for (int j = 1; j < intNumber.Length; j++) { if (intNumber[j] >= 48 && intNumber[j] <= 57)//判断字符ASCII值是否0-9之间 { strAsciiName += Convert.ToChar(intNumber[j]).ToString(); } else if (intNumber[j] >= 65 && intNumber[j] <= 90)//判断字符ASCII值是否A-Z之间 { strAsciiName += Convert.ToChar(intNumber[j]).ToString(); } else if (intNumber[j] >= 97 && intNumber[j] <= 122)//判断字符ASCII值是否a-z之间 { strAsciiName += Convert.ToChar(intNumber[j]).ToString(); } else//判断字符ASCII值不在以上范围内 { if (intNumber[j] > 122)//判断字符ASCII值是否大于z { strAsciiName += Convert.ToChar(intNumber[j] - 10).ToString(); } else { strAsciiName += Convert.ToChar(intNumber[j] - 9).ToString(); } } } return strAsciiName;//返回注册码 }
4、常用的Key
ObjectQuery和ManagementClass都需要输入Key值,以明确需要获取什么类型的数据。其常用的Key值如下:
internal enum WmiType { Win32_Processor, // CPU 处理器 Win32_PhysicalMemory, // 物理内存条 Win32_Keyboard, // 键盘 Win32_PointingDevice, // 点输入设备,包括鼠标。 Win32_FloppyDrive, // 软盘驱动器 Win32_DiskDrive, // 硬盘驱动器 Win32_CDROMDrive, // 光盘驱动器 Win32_BaseBoard, // 主板 Win32_BIOS, // BIOS 芯片 Win32_ParallelPort, // 并口 Win32_SerialPort, // 串口 Win32_SerialPortConfiguration, // 串口配置 Win32_SoundDevice, // 多媒体设置,一般指声卡。 Win32_SystemSlot, // 主板插槽 (ISA & PCI & AGP) Win32_USBController, // USB 控制器 Win32_NetworkAdapter, // 网络适配器 Win32_NetworkAdapterConfiguration, // 网络适配器设置 Win32_Printer, // 打印机 Win32_PrinterConfiguration, // 打印机设置 Win32_PrintJob, // 打印机任务 Win32_TCPIPPrinterPort, // 打印机端口 Win32_POTSModem, // MODEM Win32_POTSModemToSerialPort, // MODEM 端口 Win32_DesktopMonitor, // 显示器 Win32_DisplayConfiguration, // 显卡 Win32_DisplayControllerConfiguration, // 显卡设置 Win32_VideoController, // 显卡细节。 Win32_VideoSettings, // 显卡支持的显示模式。 // 操作系统 Win32_TimeZone, // 时区 Win32_SystemDriver, // 驱动程序 Win32_DiskPartition, // 磁盘分区 Win32_LogicalDisk, // 逻辑磁盘 Win32_LogicalDiskToPartition, // 逻辑磁盘所在分区及始末位置。 Win32_LogicalMemoryConfiguration, // 逻辑内存配置 Win32_PageFile, // 系统页文件信息 Win32_PageFileSetting, // 页文件设置 Win32_BootConfiguration, // 系统启动配置 Win32_ComputerSystem, // 计算机信息简要 Win32_OperatingSystem, // 操作系统信息 Win32_StartupCommand, // 系统自动启动程序 Win32_Service, // 系统安装的服务 Win32_Group, // 系统管理组 Win32_GroupUser, // 系统组帐号 Win32_UserAccount, // 用户帐号 Win32_Process, // 系统进程 Win32_Thread, // 系统线程 Win32_Share, // 共享 Win32_NetworkClient, // 已安装的网络客户端 Win32_NetworkProtocol, // 已安装的网络协议 }
5、全部Key值
internal enum WmiType { 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_PhysicalMedia, 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_TCPIPPrinterPort, 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, }