zoukankan      html  css  js  c++  java
  • 获取系统当前可用串口的两种方法

    进行串口通信之前,需要获取当前系统的可用串口。要想达到此目的,有两种方式,读取注册表和使用CreateFile函数轮询读取串口。

    1.使用CreateFile轮询读取串口:

     1 UINT CComDebugToolDlg::GetSerialPortState()
     2 {
     3      CString strCom;
     4     int nCom=0;
     5     HANDLE hCom;
     6     
     7     do 
     8     {
     9         nCom++;
    10         strCom.Format("COM%d",nCom);
    11     
    12         hCom=CreateFile(strCom,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,0);//轮询打开串口
    13         if (INVALID_HANDLE_VALUE==hCom)
    14         {
    15             DWORD err=::GetLastError();
    16         }
    17         else
    18         {
    19             m_comCbx.AddString(strCom);
    20         }
    21         CloseHandle(hCom);//关闭串口
    22     } while (nCom<256);
    23     m_comCbx.SetCurSel(0);
    24     return 0;       
    25 }

    2.读取注册表

     1 UINT CComDebugToolDlg::GetSerialPortState()
     2 {
     3     LPCTSTR strReg="HARDWARE\DEVICEMAP\SERIALCOMM";
     4     HKEY hKey;
     5     CString strSerialPortList[256];
     6     int i=0;
     7     
     8     long ret=0;
     9     DWORD dwIndex=0;
    10     char name[25]={0};
    11     DWORD dwName;
    12     DWORD dwType;
    13     UCHAR szPortName[25]={0};
    14     DWORD szPortNameOfBytes=sizeof(szPortName);
    15     
    16     ret=::RegOpenKeyEx(HKEY_LOCAL_MACHINE,strReg,0,KEY_READ,&hKey);
    17     if (ret!=ERROR_SUCCESS)
    18     {
    19         return -1;
    20     } 
    21     
    22     do 
    23     {
    24         ret=RegEnumValue(hKey,dwIndex++,name,&dwName,NULL,&dwType,szPortName,&szPortNameOfBytes);
    25         if (ret==ERROR_SUCCESS||ret==ERROR_MORE_DATA)
    26         {
    27             strSerialPortList[i]=(CString)szPortName;
    28             m_comCbx.AddString(strSerialPortList[i]);
    29             i++;
    30         }
    31 
    32     } while (ret=ERROR_SUCCESS||ret==ERROR_MORE_DATA);
    33     RegCloseKey(hKey);
    34 
    35     m_comCbx.SetCurSel(0);
    36 
    37     return 0;
    38 }
  • 相关阅读:
    magento 产品目录全部修改 :
    zencart 支付流程总结
    去掉 power by ecshop的方法
    ECSHOP实现收货国家省市由选择下拉菜单改为手动
    MYSQL的随机抽取实现方法
    Ecshop中导航栏中使用二级菜单显示并调用子分类
    打包遇到的问题
    jQuery is not defined问题
    实现表格中每行展开收起内容
    jQuery对象与DOM对象的相互转化
  • 原文地址:https://www.cnblogs.com/HPAHPA/p/7928719.html
Copyright © 2011-2022 走看看