獲取windows 作業系統下的硬體或作業系統資訊等

一隻獨行的猿發表於2021-08-08

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

獲取windows 作業系統下的硬體或作業系統資訊等
 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值

 

相關文章