现在的位置: 首页 > 综合 > 正文

通过GUID读取COM口信息

2014年03月06日 ⁄ 综合 ⁄ 共 1961字 ⁄ 字号 评论关闭

void EnumerCOMPortByGUID()
{
    HDEVINFO hDevInfo;   
    SP_DEVINFO_DATA DeviceInfoData;   
    DWORD i = 0;   
       
    hDevInfo = SetupDiGetClassDevs((LPGUID) &GUID_DEVCLASS_PORTS, 0, 0,DIGCF_PRESENT);   
    /*  
    GUID_DEVCLASS_FDC软盘控制器  
    GUID_DEVCLASS_DISPLAY显示卡  
    GUID_DEVCLASS_CDROM光驱  
    GUID_DEVCLASS_KEYBOARD键盘  
    GUID_DEVCLASS_COMPUTER计算机  
    GUID_DEVCLASS_SYSTEM系统  
    GUID_DEVCLASS_DISKDRIVE磁盘驱动器  
    GUID_DEVCLASS_MEDIA声音、视频和游戏控制器  
    GUID_DEVCLASS_MODEMMODEM  
    GUID_DEVCLASS_MOUSE鼠标和其他指针设备  
    GUID_DEVCLASS_NET网络设备器  
    GUID_DEVCLASS_USB通用串行总线控制器  
    GUID_DEVCLASS_FLOPPYDISK软盘驱动器  
    GUID_DEVCLASS_UNKNOWN未知设备  
    GUID_DEVCLASS_SCSIADAPTERSCSI 和 RAID 控制器  
    GUID_DEVCLASS_HDCIDE ATA/ATAPI 控制器  
    GUID_DEVCLASS_PORTS端口(COM 和 LPT)  
    GUID_DEVCLASS_MONITOR监视器  
    */   
       
    if (hDevInfo == INVALID_HANDLE_VALUE)   
    {   
        DWORD dwError = GetLastError();   
        // Insert error handling here.   
        return ;   
    }   
       
    // Enumerate through all devices in Set.        
    DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);        
    for(i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData); i++)     
    {   
        DWORD DataT = 0;   
char buffer[256] = {0};  

        DWORD buffersize = sizeof(buffer);   

        while (!SetupDiGetDeviceRegistryProperty(hDevInfo,   
                                                &DeviceInfoData,   
                                                SPDRP_FRIENDLYNAME,   
                                                &DataT,   
                                                (PBYTE)buffer,   
                                                buffersize,   
                                                &buffersize))   
        {   
            if(GetLastError() == ERROR_INSUFFICIENT_BUFFER)   
            {   
                // Change the buffer size.   
                //if (buffer) LocalFree(buffer);   
            }   
            else   
            {   
                // Insert error handling here. 
//cout << "Friend Name is " << buffer << endl;
                break;   
            }   
        }           

cout << "Friend Name is " << buffer << endl;

        if(buffer)   
        {   
            LocalFree(buffer);   
        }   
    }   
    if(GetLastError() != NO_ERROR && GetLastError() != ERROR_NO_MORE_ITEMS)   
    {   
        return ;   
    }   
   
    // Cleanup   
    SetupDiDestroyDeviceInfoList(hDevInfo);   

}

这段代码可以获取到COM口在设备管理器的端口节点下的描述信息,比如“XXXXXXX (COMXX)”。

抱歉!评论已关闭.