C++设备信息获取方法.docx
C+设备信息获取方法00426-OEM-8992662-00006已知的设备: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, / 已安装的网络协议 CString ReadRegisteTable(CString root,CString path, CString key)HKEY hAppKey;LPCTSTR WINDS_SERVICE_REGISTRY_KEY=path;LPCTSTR DATA_FILE_SUB_KEY=key;char szDataFile80;if(root="HKEY_LOCAL_MACHINE")if (ERROR_SUCCESS = RegOpenKeyEx (HKEY_LOCAL_MACHINE,WINDS_SERVICE_REGISTRY_KEY,0,KEY_READ,&hAppKey)ULONG cbSize = MAX_PATH*sizeof(TCHAR);DWORD dwFlag = RegQueryValueEx (hAppKey,DATA_FILE_SUB_KEY,NULL,NULL,(LPBYTE)szDataFile,&cbSize);RegCloseKey (hAppKey);if (ERROR_SUCCESS = dwFlag)CString strDate=szDataFile; /MessageBox(strDate);if(strDate.GetLength>0) return strDate;else return ""return ""if(root="HKEY_CURRENT_USER")if (ERROR_SUCCESS = RegOpenKeyEx (HKEY_CURRENT_USER,WINDS_SERVICE_REGISTRY_KEY,0,KEY_READ,&hAppKey)ULONG cbSize = MAX_PATH*sizeof(TCHAR);DWORD dwFlag = RegQueryValueEx (hAppKey,DATA_FILE_SUB_KEY,NULL,NULL,(LPBYTE)szDataFile,&cbSize);RegCloseKey (hAppKey);if (ERROR_SUCCESS = dwFlag)CString strDate=szDataFile; /MessageBox(strDate);if(strDate.GetLength>0) return strDate;else return ""return ""return ""获取用户名: GetWindowsDirectory(szInfo, MAX_PATH + 1);获取系统补丁: using System.Management;var searchOS = new ManagementObjectSearcher("Select * from Win32_OperatingSystem");Response.Write("<h3>本机最新安装补丁信息:</h3>" + "<br/>");foreach (var item in searchOS.Get)foreach (var itemPro in item.Properties)Response.Write(itemPro.Name + ":" + itemPro.Value + "<br/>");Response.Write("<br/>");Response.Write("<hr/>");var searchQFE = new ManagementObjectSearcher("Select * from Win32_QuickFixEngineering");Response.Write("<h3>本机历史安装补丁信息:</h3>" + "<br/>");foreach (var item in searchQFE.Get)foreach (var itemPro in item.Properties)Response.Write(itemPro.Name + ":" + itemPro.Value + "<br/>");Response.Write("<br/>");Response.Write("<hr/>");通过注册表:/通过注册表获取的信息RegOpenKeyEx(HKEY_LOCAL_MACHINE, RegKey, 0, KEY_QUERY_VALUE, &hKey);/ 打开注册表的键;RegEnumValue(hKey, dwIndex, EnvironVariable, &dwVariableLength, NULL, NULL, NULL, NULL);/ 查询我们需要的信息值;GetEnvironmentVariable(EnvironVariable, EnvironString, 1024);获取磁盘分区信息:#include <iostream>#include <windows.h>using namespace std; int mainint DiskCount = 0;DWORD DiSKINfo = GetLogicalDrives;/利用GetLogicalDrives函数可以获取系统中逻辑驱动器的数量,函数返回的是一个32位无符号整型数据。while(DiskInfo)/通过循环操作查看每一位数据是否为1,假如为1则磁盘为真,假如为0则磁盘不存在。if(DiskInfo&1)/通过位运算的逻辑与操作,判定是否为1+DiskCount;DiskInfo = DiskInfo >> 1;/通过位运算的右移操作保证每循环一次所检查的位置向右移动一位。/DiskInfo = DiskInfo/2;cout<<"逻辑磁盘数量:"<<DiskCount<<endl;/-int DSLength = GetLogicalDriveStrings(0,NULL);/通过GetLogicalDriveStrings函数获取所有驱动器字符串信息长度。char* DStr = new charDSLength;/用获取的长度在堆区创建一个c风格的字符串数组GetLogicalDriveStrings(DSLength,(LPTSTR)DStr);/通过GetLogicalDriveStrings将字符串信息复制到堆区数组中,其中保存了所有驱动器的信息。int DType;int si=0;BOOL fResult;unsigned _int64 i64FreeBytesToCaller;unsigned _int64 i64TotalBytes;unsigned _int64 i64FreeBytes;for(int i=0;i<DSLength/4;+i)/为了显示每个驱动器的状态,则通过循环输出实现,由于DStr内部保存的数据是A:NULLB:NULLC:NULL,这样的信息,所以DSLength/4可以获得具体大循环范围char dir3=DStrsi,':',''cout<<dir;DType = GetDriveType(DStr+i*4);/GetDriveType函数,可以获取驱动器类型,参数为驱动器的根目录if(DType = DRIVE_FIXED)cout<<"硬盘"else if(DType = DRIVE_CDROM)cout<<"光驱"else if(DType = DRIVE_REMOVABLE)cout<<"可移动式磁盘"else if(DType = DRIVE_REMOTE)cout<<"网络磁盘"else if(DType = DRIVE_RAMDISK)cout<<"虚拟RAM磁盘"else if (DType = DRIVE_UNKNOWN)cout<<"未知设备"fResult = GetDiskFreeSpaceEx (dir,(PULARGE_INTEGER)&i64FreeBytesToCaller,(PULARGE_INTEGER)&i64TotalBytes,(PULARGE_INTEGER)&i64FreeBytes);/GetDiskFreeSpaceEx函数,可以获取驱动器磁盘的空间状态,函数返回的是个BOOL类型数据if(fResult)/通过返回的BOOL数据判定驱动器是否在工作状态cout<<" totalspace:"<<(float)i64TotalBytes/1024/1024<<" MB"/磁盘总容量cout<<" freespace:"<<(float)i64FreeBytesToCaller/1024/1024<<" MB"/磁盘剩余空间elsecout<<" 设备未预备好"cout<<endl;si+=4;system("pause"); BOOL GetDeviceInfo(CStringArray& arrDrives) 08. 09. DWORD dw = :GetLogicalDriveStrings(0, NULL); 10. TCHAR* pAllDrivers = new TCHARdw; 11. :GetLogicalDriveStrings(dw, pAllDrivers); 12. LPCTSTR pDriver = pAllDrivers; 13. DWORD DriverNum = 0; 14. while(pDriver0 != 0) 15. 16. arrDrives.Add(pDriver); 17. DriverNum+; 18. pDriver = _tcschr(pDriver, 0) + 1; 19. 20. delete pAllDrivers; 21. return TRUE; 22./ 函数描述:函数名GetDeviceInfo02./ 功能:取驱动器信息 03./ GetLogicalDriveStrings返回的格式为A:0B:0C:0 04./ 参数描述:arrDrives存储所有盘符 05./ 返回值描述:TRUE成功 FALSE失败 06./ 07.BOOL GetDeviceInfo(CStringArray& arrDrives)08. 09. DWORD dw = :GetLogicalDriveStrings(0, NULL); 10. TCHAR* pAllDrivers = new TCHARdw; 11. :GetLogicalDriveStrings(dw, pAllDrivers); 12. LPCTSTR pDriver = pAllDrivers; 13. DWORD DriverNum = 0; 14. while(pDriver0 != 0) 15. 16. arrDrives.Add(pDriver); 17. DriverNum+;18. pDriver = _tcschr(pDriver, 0) + 1; 19. 20. delete pAllDrivers; 21. return TRUE; 22.int DSLength = GetLogicalDriveStrings(0,NULL);/通过GetLogicalDriveStrings函数获取所有驱动器字符串信息长度。char* DStr = new charDSLength;/用获取的长度在堆区创建一个c风格的字符串数组GetLogicalDriveStrings(DSLength,(LPTSTR)DStr);/通过GetLogicalDriveStrings将字符串信息复制到堆区数组中,其中保存了所有驱动器的信息。int DType;int si=0;for(int i=0;i<DSLength/4;+i)/为了显示每个驱动器的状态,则通过循环输出实现,由于DStr内部保存的数据是A:NULLB:NULLC:NULL,这样的信息,所以DSLength/4可以获得具体大循环范围char dir3=DStrsi,':',''/cout<<dir;DType = GetDriveType(DStr+i*4);/GetDriveType函数,可以获取驱动器类型,参数为驱动器的根目录if(DType = DRIVE_FIXED)printf("%c",*dir);printf("硬盘n");si+=4;system("pause");/return 1;