VC++ 枚举串口列表


int   FindCommPort(   CComboBox   *pComboBox   )
{
 HDEVINFO   hDevInfo;
    SP_DEVINFO_DATA   DeviceInfoData;
    DWORD   i;

    hDevInfo   =   SetupDiGetClassDevs((LPGUID)   &GUID_DEVCLASS_PORTS,   0,   0,DIGCF_PRESENT);

    if   (hDevInfo   ==   INVALID_HANDLE_VALUE)
    {
            //   Insert   error   handling   here.
            return   1;
    }

 pComboBox->ResetContent();
    //   Enumerate   through   all   devices   in   Set.

    DeviceInfoData.cbSize   =   sizeof(SP_DEVINFO_DATA);
    for   (i=0;SetupDiEnumDeviceInfo(hDevInfo,i,
            &DeviceInfoData);i++)
    {
            DWORD   DataT;
            //LPTSTR   buffer   =   NULL;
   char   buffer[2048];
            DWORD   buffersize   =sizeof(buffer);
            while   (!SetupDiGetDeviceRegistryProperty(
                    hDevInfo,
                    &DeviceInfoData,
                    SPDRP_FRIENDLYNAME,
                    &DataT,
                    (PBYTE)buffer,
                    buffersize,
                    &buffersize))
            {
               break;
   }
   char *str = strstr(buffer,"COM");
   if(str != NULL){
    char *end = strstr(str,")");
    if(end)  *end = 0;
    pComboBox->AddString(str);
   }
    }
 if   (   GetLastError()!=NO_ERROR   && GetLastError()!=ERROR_NO_MORE_ITEMS   )
 {
  return   1;
 }
//     Cleanup
 SetupDiDestroyDeviceInfoList(hDevInfo);
 
 if(   pComboBox-> GetCount()   ==   0   )
 {
 // ::AfxMessageBox(   "找不到串口!!! "   );
 }
 else{
  pComboBox->SetCurSel(0);
 }
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值