VC如何获取硬件ID,CPU,硬件,网卡等
VC如何获取硬件ID,CPU,硬件,网卡等
[解决办法]
参考这个:http://topic.csdn.net/t/20041009/13/3437016.html
[解决办法]
http://download.csdn.net/source/1118204
很早以前整理的,可能有些不是很正确了!含有源代码,已经做成一个DLL了,大家可以根据需要自己修改源码使用!免费、开源、绿色!
含 cpu 主板 硬盘 网卡 BIOS等序列号取得 另外有加密解密的函数
[解决办法]
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