奇怪的工作,製作的是一款辦公應用軟體,領導卻要求我統計使用者計算機的物理資訊,什麼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,
}

全部key值