当前位置:文档之家› C++设备信息获取方法

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 szDataFile[80];
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("

本机最新安装补丁信息:

" + "
");
foreach (var item in searchOS.Get())
{
foreach (var itemPro in item.Properties)
{
Response.Write(https://www.doczj.com/doc/968872491.html, + ":" + itemPro.Value + "
");

}
Response.Write("
");
}
Response.Write("
");

var searchQFE = new ManagementObjectSearcher("Select * from Win32_QuickFixEngineering");
Response.Write("

本机历史安装补丁信息:

" + "
");
foreach (var item in searchQFE.Get())
{
foreach (var itemPro in item.Properties)
{
Response.Write(https://www.doczj.com/doc/968872491.html, + ":" + itemPro.Value + "
");

}
Response.Write("
");
}
Response.Write("
");




通过注册表:
//通过注册表获取的信息
RegOpenKeyEx(HKEY_LOCAL_MACHINE, RegKey, 0, KEY_QUERY_VALUE, &hKey);
// 打开注册表的键;
RegEnumValue(hKey, dwIndex, EnvironVariable, &dwVariableLength, NULL, NULL, NULL, NULL);
// 查询我们需要的信息值;
GetEnvironmentVariable(EnvironVariable, EnvironString, 1024);



获取磁盘分区信息:

#include
#include
using namespace std;

int main()
{
int DiskCount = 0;
DWORD DiSKINfo = GetLogicalDrives();
//利用GetLogicalDrives()函数可以获取系统中逻辑驱动器的数量,函数返回的是一个32位无符号整型数据。
while(DiskInfo)//通过循环操作查看每一位数据是否为1,假如为1则磁盘为真,假如为0则磁盘不存在。

{
if(DiskInfo&1)//通过位运算的逻辑与操作,判定是否为1
{
++DiskCount;

}
DiskInfo = DiskInfo >> 1;//通过位运算的右移操作保证每循环一次所检查的位置向右移动一位。
//DiskInfo = DiskInfo/2;
}
cout<<"逻辑磁盘数量:"<//-------------------------------------------------------------------

int DSLength = GetLogicalDriveStrings(0,NULL);
//通过GetLogicalDriveStrings()函数获取所有驱动器字符串信息长度。
char* DStr = new char[DSLength];//用获取的长度在堆区创建一个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//为了显示每个驱动器的状态,则通过循环输出实现,由于DStr内部保存的数据是A:\NULLB:\NULLC:\NULL,这样的信息,所以DSLength/4可以获得具体大循环范围
{
char dir[3]={DStr[si],':','\\'};
cout<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";//磁盘剩余空间
}
else
{
cout<<" 设备未预备好";
}
cout<si+=4;
}

system("pause");
}











BOOL GetDeviceInfo(CStringArray& arrDrives) 08.{ 09.
DWORD dw = ::GetLogicalDriveStri

ngs(0, NULL); 10.
TCHAR* pAllDrivers = new TCHAR[dw]; 11.
::GetLogicalDriveStrings(dw, pAllDrivers); 12.
LPCTSTR pDriver = pAllDrivers; 13.
DWORD DriverNum = 0; 14.
while(pDriver[0] != 0) 15.
{ 16.
arrDrives.Add(pDriver); 17.
DriverNum++; 18.
pDriver = _tcschr(pDriver, 0) + 1; 19.
} 20.
delete [] pAllDrivers; 21.
return TRUE; 22.}




















// 函数描述:函数名GetDeviceInfo
02.// 功能:取驱动器信息
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 TCHAR[dw];
11. ::GetLogicalDriveStrings(dw, pAllDrivers);
12. LPCTSTR pDriver = pAllDrivers;
13. DWORD DriverNum = 0;
14.
while(pDriver[0] != 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 char[DSLength];//用获取的长度在堆区创建一个c风格的字符串数组

GetLogicalDriveStrings(DSLength,(LPTSTR)DStr);

//通过GetLogicalDriveStrings将字符串信息复制到堆区数组中,其中保存了所有驱动器的信息。

int DType;
int si=0;

for(int i=0;i
//为了显示每个驱动器的状态,则通过循环输出实现,由于DStr内部保存的数据是A:\NULLB:\NULLC:\NULL,这样的信息,所以DSLength/4可以获得具体大循环范围

{

char dir[3]={DStr[si],':','\\'};

//cout<

DType = GetDriveType(DStr+i*4);

//GetDriveType函数,可以获取驱动器类型,参数为驱动器的根目录

if(DType == DRIVE_FIXED)

{
printf("%c",*dir);

printf("硬盘\n");

}
si+=4;


}
system("pause");//

return 1;





相关主题
文本预览
相关文档 最新文档