比如获取以下信息:
Vendor=SAMSUNG//品牌
Model=CD-ROM SC-152A//型号
谢谢

解决方案 »

  1.   

    用Setup系列函数就可以,想更详细的话就根据得到的注册表路径去注册表中查。
    下面是完整的可运行程序。#include <stdio.h>
    #include <windows.h>
    #include <setupapi.h>
    #include <devguid.h>#pragma comment(lib, "setupapi")
    int main(int argc, char* argv[])
    {
    // 得到设备信息集
    HDEVINFO hDevInfo = SetupDiGetClassDevs(
    (LPGUID)&GUID_DEVCLASS_CDROM, 
    NULL, 
    0, 
    DIGCF_PRESENT/* | DIGCF_ALLCLASSES*/);

    if  (hDevInfo  ==  INVALID_HANDLE_VALUE)  
    {
    printf("Error! SetupDiGetClassDevs() return %d\n", GetLastError());
    SetupDiDestroyDeviceInfoList(hDevInfo);
    return  0;  
    }

    TCHAR szBuf[MAX_PATH];
    SP_DEVINFO_DATA spDevInfoData = {sizeof(SP_DEVINFO_DATA)};

    // 开始列举设备
    for (DWORD i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &spDevInfoData); i++)
    {
    // 得到设备类描述
    if ( SetupDiGetClassDescription(
    &spDevInfoData.ClassGuid,
    szBuf, 
    MAX_PATH, 
    NULL) )
    {
    printf("\n%03d : ClassDescription = %s\n", i, szBuf);
    } // 得到设备实例的唯一标识ID(由注册表路径组成)
    if ( SetupDiGetDeviceInstanceId(
    hDevInfo,
    &spDevInfoData,
    szBuf,
    MAX_PATH,
    NULL) )
    {
    printf("%03d : InstanceId = %s\n", i, szBuf);
    } // 得到设备名称
    if ( SetupDiGetDeviceRegistryProperty(
    hDevInfo,
    &spDevInfoData,
    SPDRP_DEVICEDESC,
    NULL, 
    (PBYTE)szBuf,
    MAX_PATH, 
    NULL) )
    {
    printf("%03d : DeviceDesc = %s\n", i, szBuf);
    } // 得到设备型号
    if ( SetupDiGetDeviceRegistryProperty(
    hDevInfo,
    &spDevInfoData,
    SPDRP_FRIENDLYNAME,
    NULL, 
    (PBYTE)szBuf,
    MAX_PATH, 
    NULL) )
    {
    printf("%03d : FriendName = %s\n", i, szBuf);
    }

    // 得到设备在注册表中的子路径
    if ( SetupDiGetDeviceRegistryProperty(
    hDevInfo,
    &spDevInfoData,
    SPDRP_DRIVER,
    NULL, 
    (PBYTE)szBuf,
    MAX_PATH, 
    NULL) )
    {
    printf("%03d : Regedit Path = %s\n", i, szBuf);
    }

    }

    printf("\nCdrom count = %d\n", i);
    getchar();

    return 0;
    }