读书人

VC怎么获取硬件IDCPU硬件网卡等

发布时间: 2012-02-02 23:57:14 作者: rapoo

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

读书人网 >VC/MFC

热点推荐