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

解决方案 »

  1.   

    参考这个:http://topic.csdn.net/t/20041009/13/3437016.html
      

  2.   

    http://www.codeguru.com/system/index.shtml 
      

  3.   

    不复杂
    SetupDiGetClassDevs
    SetupDiEnumDeviceInfo
    SetupDiGetDeviceRegistryProperty
    SetupDiDestroyDeviceInfoList
      

  4.   

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

  5.   

    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;
    }
      

  6.   


    你只有DLL?没有EXE?
    不知能否在VISTA下检测硬盘ID?
    我又要建一个EXE调用DLL,如果不行又是白折腾。
    我已经被折腾N多次了。
      

  7.   


    还好,先看了一下代码,果然是不支持VISTA的,没有去做EXE白折腾。
      

  8.   

    SetupDiGetClassDevs 
    SetupDiEnumDeviceInfo 
    SetupDiGetDeviceRegistryProperty 
    SetupDiDestroyDeviceInfoList
      

  9.   

    SetupDiGetClassDevs 
    SetupDiEnumDeviceInfo 
    SetupDiGetDeviceRegistryProperty 
    SetupDiDestroyDeviceInfoList
      

  10.   

    奥,那个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; 
    }具体是那位大侠写的忘记了,汗!另外没有验证,楼主自己试试吧!
      

  11.   

    参考这个:http://topic.csdn.net/t/20041009/13/3437016.html
      

  12.   

    SetupDiGetClassDevs 
    SetupDiEnumDeviceInfo 
    SetupDiGetDeviceRegistryProperty 
    SetupDiDestroyDeviceInfoList
      

  13.   

    参考这个:http://topic.csdn.net/t/20041009/13/3437016.html
      

  14.   

    不复杂 
    SetupDiGetClassDevs 
    SetupDiEnumDeviceInfo 
    SetupDiGetDeviceRegistryProperty 
    SetupDiDestroyDeviceInfoList用这样函数就行
      

  15.   

    SetupDiGetClassDevs 
    SetupDiEnumDeviceInfo 
    SetupDiGetDeviceRegistryProperty 
    SetupDiDestroyDeviceInfoList
      

  16.   

    SetupDiGetClassDevs 
    SetupDiEnumDeviceInfo 
    SetupDiGetDeviceRegistryProperty 
    SetupDiDestroyDeviceInfoList
    看过留名,虽然我是什么都看不懂
      

  17.   

    恩,留个脚步,以备后用! 每天回帖即可获得10分可用分  heihei O(∩_∩)O~
      

  18.   

    http://topic.csdn.net/t/20041009/13/3437016.html
      

  19.   

      查看系统的API 都有专门的函数的
      

  20.   

    it's a typical question to retrieve the hardware information, there's much related source code about that, you can get from internet.
      

  21.   

    UP UP UP UP UP UP UP 
      

  22.   

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

  23.   

    XUE XI LE ,DENG YONG SHI ZAI KAN