首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

VC怎么获取硬件ID,CPU,硬件,网卡等

2012-02-02 
VC如何获取硬件ID,CPU,硬件,网卡等VC如何获取硬件ID,CPU,硬件,网卡等[解决办法]参考这个:http://topic.csd

VC如何获取硬件ID,CPU,硬件,网卡等
VC如何获取硬件ID,CPU,硬件,网卡等

[解决办法]
参考这个:http://topic.csdn.net/t/20041009/13/3437016.html
[解决办法]
http://download.csdn.net/source/1118204

很早以前整理的,可能有些不是很正确了!含有源代码,已经做成一个DLL了,大家可以根据需要自己修改源码使用!免费、开源、绿色!
含 cpu 主板 硬盘 网卡 BIOS等序列号取得 另外有加密解密的函数
[解决办法]

C/C++ code
CString GetMacAddress()/**    通过WMI取第一块活动网卡地址,事先需要调用过CoInitialize()初始化COM*/{    HRESULT hRes;    hRes = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT,        RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);    if (FAILED(hRes))        return _T("");    IWbemLocator *pLoc = NULL;    hRes = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID*)&pLoc);    if (FAILED(hRes))        return _T("");    IWbemServices *pSvc = NULL;    hRes = pLoc->ConnectServer(_bstr_t(L"ROOT\\CIMV2"), NULL, NULL, 0,        NULL, 0, 0, &pSvc);    if (FAILED(hRes))    {        pLoc->Release();             return _T("");    }    hRes = CoSetProxyBlanket(pSvc, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE,        NULL, RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_DEFAULT);    if (FAILED(hRes))    {        pSvc->Release();        pLoc->Release();             return _T("");    }    IEnumWbemClassObject* pEnumerator = NULL;    hRes = pSvc->ExecQuery(_bstr_t(L"WQL"),         _bstr_t(L"SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = TRUE"),        WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,         NULL, &pEnumerator);    if (FAILED(hRes))    {        pSvc->Release();        pLoc->Release();        return _T("");    }    CString szMacAddress = _T("");    while (true)    {        IWbemClassObject *pclsObj = NULL;        ULONG uReturn = 0;        hRes = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);        if (FAILED(hRes) || !uReturn)            break;        VARIANT vtProp;        VariantInit(&vtProp);        if (SUCCEEDED(pclsObj->Get(L"MACAddress", 0, &vtProp, 0, 0)))        {            if (V_VT(&vtProp) == VT_BSTR)            {                szMacAddress = vtProp.bstrVal;                VariantClear(&vtProp);                pclsObj->Release();                break;            }            VariantClear(&vtProp);        }        pclsObj->Release();    }    pEnumerator->Release();    pSvc->Release();    pLoc->Release();    return szMacAddress;}
[解决办法]
奥,那个DLL大概在02年左右整理的好像,时间太久了,应该是不支持vsita的,楼主看看这段代码是否有用?我是拷贝来的:
/************************************************************ 
//函数名称:GetDriverInfomation 
//函数功能:得到驱动器的信息 
//参数1:bAlpha - BYTE型,驱动器的代号A-Z(a-z) 
//参数2:iGTI_TYPE - int,将要获取的驱动器信息类型 
// GDI_VOLUMENAME 得到驱动器名字 
// GDI_VOLUMESERIALNUMBER 得到驱动器序列号 
// GDI_VOLUMEFILESYSTEM 得到驱动器文件系统 
// GDI_VOLUMETYPE 得到驱动器类型 
// GDI_VOLUMESIZE 得到驱动器总大小 
// GDI_VOLUMEFREESIZE 得到驱动器剩余大小 
//返回值:CString型,所要得到的驱动器信息的字符串表达 
//例子:得到C盘的名字GetDriverInfomation('C',GDI_VOLUMENAME) 
************************************************************/ 
#define GDI_VOLUMENAME 0 
#define GDI_VOLUMESERIALNUMBER 1 
#define GDI_VOLUMEFILESYSTEM 2 
#define GDI_VOLUMETYPE 3 
#define GDI_VOLUMESIZE 4 
#define GDI_VOLUMEFREESIZE 5 
CString GetDriverInfomation(BYTE bAlpha,int iGTI_TYPE) 

CString strResult = _T(""); 



if(!::IsCharAlpha((TCHAR)bAlpha)) 

strResult = _T("驱动器参数无效!"); 
return strResult; 

else 

/**********获取驱动器名字、序列号和文件系统部分**********/ 
CString strRootPathName; 
strRootPathName.Format(_T("%c:\\"),bAlpha); 
LPCTSTR lpRootPathName = strRootPathName; 
LPTSTR lpVolumeNameBuffer = new char[_MAX_FNAME]; 
DWORD nVolumeNameSize = _MAX_FNAME; 
DWORD nVolumeSerialNumber = 0;//便于驱动器无效时做判断 
DWORD nMaximumComponentLength; 
DWORD nFileSystemFlags; 
LPTSTR lpFileSystemNameBuffer = new char[20];//文件系统(NTFS,FAT)多大有定义好的宏吗 
DWORD nFileSystemNameSize = 20; 
GetVolumeInformation( 
lpRootPathName, 
lpVolumeNameBuffer, 
nVolumeNameSize, 
&nVolumeSerialNumber, 
&nMaximumComponentLength, 
&nFileSystemFlags, 
lpFileSystemNameBuffer, 
nFileSystemNameSize); 

/**********获取驱动器类型部分**********/ 
CString strDriveType; 

/**********获取驱动器总大小和剩余大小部分**********/ 
LPCTSTR lpDirectoryName = new char[2]; 
lpDirectoryName = (LPCTSTR)strRootPathName.Mid(0,2); 
_ULARGE_INTEGER FreeBytesAvailable,TotalNumberOfBytes,TotalNumberOfFreeBytes ; 

__int64 iVolumeSize = 0,iVolumeFreeSize = 0; 

GetDiskFreeSpaceEx(strRootPathName.Mid(0,2),&FreeBytesAvailable,&TotalNumberOfBytes,&TotalNumberOfFreeBytes ); 
iVolumeSize = TotalNumberOfBytes.QuadPart / 1024 / 1024; 
iVolumeFreeSize = FreeBytesAvailable.QuadPart / 1024 / 1024; 

/**********根据参数得出响应的驱动器信息**********/ 
switch(iGTI_TYPE) 

case GDI_VOLUMENAME: 
if (lpVolumeNameBuffer != NULL) 
strResult.Format(_T("驱动器 %c 的名字为:%s."),bAlpha,lpVolumeNameBuffer); 
else 
strResult.Format(_T("驱动器 %c 的名字为:%s."),bAlpha,lpVolumeNameBuffer); 
//strResult.Format(_T("获取驱动器名字失败!")); 
break; 
case GDI_VOLUMESERIALNUMBER: 
if (nVolumeSerialNumber != 0) 
strResult.Format(_T("驱动器 %c 的序列号为:%X."),bAlpha,nVolumeSerialNumber); 
else 
strResult.Format(_T("获取驱动器序列号失败!")); 
break; 
case GDI_VOLUMEFILESYSTEM: 
if (lpFileSystemNameBuffer != NULL) 
strResult.Format(_T("驱动器 %c 的文件系统为:%s."),bAlpha,lpFileSystemNameBuffer); 
else 
strResult.Format(_T("获取驱动器文件系统失败!")); 
break; 
case GDI_VOLUMESIZE: 
if (iVolumeSize != 0) 
strResult.Format(_T("驱动器 %c 的总大小为:%.2fGB."),bAlpha,(float)iVolumeSize/1024); 
else 
strResult.Format(_T("获取驱动器总大小失败!")); 
break; 
case GDI_VOLUMEFREESIZE: 
if (iVolumeFreeSize != 0) 
strResult.Format(_T("驱动器 %c 的剩余大小为:%.2fGB."),bAlpha,(float)iVolumeFreeSize/1024); 
else 
strResult.Format(_T("获取驱动器剩余大小失败!")); 
break; 
case GDI_VOLUMETYPE: 
switch(GetDriveType(lpRootPathName)) 

case DRIVE_UNKNOWN: 
strDriveType = _T("未知类型!"); 
break; 
case DRIVE_NO_ROOT_DIR: 
strResult = _T("没有根目录的驱动器!"); 
return strResult; 
case DRIVE_REMOVABLE: 
strDriveType = _T("可移动磁盘"); 
break; 
case DRIVE_FIXED: 
strDriveType = _T("硬盘"); 
break; 
case DRIVE_REMOTE: 
strDriveType = _T("网络驱动器"); 
break; 
case DRIVE_CDROM: 
strDriveType = _T("光驱(CD-ROM)"); 
break; 
case DRIVE_RAMDISK: 
strDriveType = _T("RAM磁盘(RAM Disk)"); 


break; 
default: 
strResult = _T("未知错误!"); 
return strResult; 

strResult.Format(_T("驱动器 %c 的类型为:%s."),bAlpha,strDriveType); 
break; 
default: 
strResult = _T("获取驱动器信息时参数设置错误!"); 
break; 




/**********返回所要求的驱动器的信息**********/ 
return strResult; 
}

具体是那位大侠写的忘记了,汗!另外没有验证,楼主自己试试吧!
[解决办法]
参考这个:http://topic.csdn.net/t/20041009/13/3437016.html
[解决办法]
参考这个:http://topic.csdn.net/t/20041009/13/3437016.html
[解决办法]
http://topic.csdn.net/t/20041009/13/3437016.html

热点排行