VC能否获取所有硬件信息,现只获得CPU的信息,其他的都不行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VC能否获取所有硬件信息,现只获得CPU的信息,其他的都不行相关的知识,希望对你有一定的参考价值。
VC是不是获取不了显示器名和显存,还有声卡网卡内存等。
如:三星S100000,内存DDR3 2G,显卡 1G和其他
现在只能获取CPU名和大小
百度一下“VC WMI”,相关资料和代码很多。
WMI接口,几乎可以获取所有硬件的信息,这些信息是基于硬件驱动程序的,基本上,windows硬件管理器可以看到的,都可以通过WMI获取。
简单信息,可以通过API函数,如GetSystemInfo获取,不过并不全面。这类的API还有很多,具体可以参考微软的MSDN在线文档(这个没有WMI全面):
http://msdn.microsoft.com/en-us/library/ms724953(v=vs.85).aspx 参考技术A 注册表里面都有 vc可以读取追问注册表哪呢,找了好久没找,找到了的也是一些不完整的东西
用vc怎么获取硬件信息
用VC6.0版的语言怎么获取系统的硬件信息,例如CPU:P4,2.6G;内存:HY512M之类的
1、获取CPU名称:
获取HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0子键中获取ProcessorNameString的键值。该注册表子键存储了当前计算机的处理器信息,如CPU名称、标识和厂商等。
void CSystemHardwareInfoDlg::OnButton1()CString strPath="HARDWARE\\\\DESCRIPTION\\\\System\\\\CentralProcessor\\\\0";
CRegKey regKey;
LONG lResult;
lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);
//打开注册表主键
if (lResult!=ERROR_SUCCESS)//读取键值不成功
AfxMessageBox("错误:无法查询有关的注册表信息");
return;
char chCPUName[50];
DWORD dwSize=50;
regKey.QueryValue(chCPUName,"ProcessorNameString",&dwSize);
//获取RegisteredOwner的值
m_strCPUName=chCPUName;
UpdateData(FALSE);
regKey.Close();//关闭注册表
2、获取CPU标识 :
获取HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0子键中获取Identifier的键值。
void CSystemHardwareInfoDlg::OnButton2()CString strPath="HARDWARE\\\\DESCRIPTION\\\\System\\\\CentralProcessor\\\\0";
CRegKey regKey;
LONG lResult;
lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);
//打开注册表主键
if (lResult!=ERROR_SUCCESS)//读取键值不成功
AfxMessageBox("错误:无法查询有关的注册表信息");
return;
char chCPUID[50];
DWORD dwSize=50;
regKey.QueryValue(chCPUID,"Identifier",&dwSize);
//获取RegisteredOwner的值
m_strCPUIdentifier=chCPUID;
UpdateData(FALSE);
regKey.Close();//关闭注册表
3、获取CPU制造商名称 :
获取HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0子键中获取VendorIdentifier的键值。
void CSystemHardwareInfoDlg::OnButton3()CString strPath="HARDWARE\\\\DESCRIPTION\\\\System\\\\CentralProcessor\\\\0";
CRegKey regKey;
LONG lResult;
lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);
//打开注册表主键
if (lResult!=ERROR_SUCCESS)//读取键值不成功
AfxMessageBox("错误:无法查询有关的注册表信息");
return;
char chVendor[50];
DWORD dwSize=50;
regKey.QueryValue(chVendor,"VendorIdentifier",&dwSize);
//获取RegisteredOwner的值
m_strVendorID=chVendor;
UpdateData(FALSE);
regKey.Close();//关闭注册表
4、获取CPU主频 :
获取HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0子键中获取~MHz的键值。注意为DWORD类型。
void CSystemHardwareInfoDlg::OnButton4()CString strPath="HARDWARE\\\\DESCRIPTION\\\\System\\\\CentralProcessor\\\\0";
CRegKey regKey;
LONG lResult;
lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS);
//打开注册表主键
if (lResult!=ERROR_SUCCESS)//读取键值不成功
AfxMessageBox("错误:无法查询有关的注册表信息");
return;
DWORD dwMHz;
DWORD dwSize=50;
regKey.QueryValue(dwMHz,"~MHz");
//获取RegisteredOwner的值
m_nMHz=dwMHz;
UpdateData(FALSE);
regKey.Close();//关闭注册表
在.net环境下(用VC#描述)获取机器的硬件信息,要用到一个类库(System.Management.dll),在解决方案资源管理器中添加System.Management 即可
我们可以将该程序编译成.dll文件,便于以后调用;
在程序代码中进行引用 using System.Management;
具体 代码为:
1.获取机器名:
public string GetHostName()
return System.Net.Dns.GetHostName();
2.获取CPU编号
public string GetCpuId()
ManagementClass mc = new ManagementClass("Win32_Processor");
ManagementObjectCollection moc = mc.GetInstances();
String strCpuID = null ;
foreach( ManagementObject mo in moc )
strCpuID = mo.Properties["ProcessorId"].Value.ToString();
break;
return strCpuID;
3.获取主硬盘编号
public string GetMainHardDiskId()
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
String strHardDiskID = null ;
foreach(ManagementObject mo in searcher.Get())
strHardDiskID = mo["SerialNumber"].ToString().Trim();
break;
return strHardDiskID ;
4.获取bios和mac地址,这个有点复杂,需要用到NETAPI32.DLL
以上是关于VC能否获取所有硬件信息,现只获得CPU的信息,其他的都不行的主要内容,如果未能解决你的问题,请参考以下文章