奇怪的工作,制作的是一款办公应用软件,领导却要求我统计用户计算机的物理信息,什么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值

 

版权声明:本文为pilgrim原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/pilgrim/p/15115782.html