BCB版的串口枚举

做自控近20年,脱离不了串口通信。原来需要获取电脑的串口时,采用的是读取注册表法,一直以来也使用正常。除非电脑系统问题造成多余的虚拟串口或usb串口号,清理下注册表即可:

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control \COM Name Arbiter,
 删除数值项ComDB即可。

但是随着业务的扩展,面对的客户越来越高端,对我们的软件要求也从细节上做出了更高要求(所谓的智能化),所以一直以来也想找个更好用的枚举电脑串口的方法。

后来看到也是一个做工控的同行 chinayu2007发布了个枚举串口的方法,试了试,发现该有的串口没有,不该有的确出现了。源码见: EnumPorts枚举当前计算机端口
运行结果:


说明:我电脑的真实串口是com1,虚拟串口com8---14:


这两天无意中在一个老外网站中浏览,看到了一个05年发布的枚举串口程序,也是bcb6.0版就下载下来试了试,很好, 电脑该有的串口都有:


下载地址BCB版串口枚举


光搬运人家的似乎不太高尚,自己原创个com编号排序的方法。因为枚举出来的串口号并不是按照com1/2/3----从小到大排列的,还得自己加工一遍。

自己的方法是容器,放出一直以来使用注册表枚举后并排序的源程序:

#include <Registry.hpp>
#include <vector>
using namespace std;


   vector <int> com;
    TStringList* List=new TStringList();
    TRegistry *reg = new TRegistry;
    reg->RootKey = HKEY_LOCAL_MACHINE;
    reg->OpenKey("HARDWARE\\DEVICEMAP\\SERIALCOMM",true);
    reg->GetValueNames(List);
    ComboBox1->Items->Clear();

    for(int i=0;i<List->Count;i++)
    {
        com.push_back((reg->ReadString(List->Strings[i])).Delete(1,3).ToInt());
    }
    sort(com.begin(), com.end());
    for(unsigned int i=0;i<com.size();i++)
    {
        ComboBox1->Items->Add("COM"+IntToStr(com[i]));
    }

    delete reg;
    delete List;
    ComboBox1->ItemIndex = 0;

不需注释,多余的话不说。


向仍然坚守bcb6.0的同行们致敬!

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值