BCB版的串口枚举
程序员文章站
2024-03-23 11:48:28
...
做自控近20年,脱离不了串口通信。原来需要获取电脑的串口时,采用的是读取注册表法,一直以来也使用正常。除非电脑系统问题造成多余的虚拟串口或usb串口号,清理**册表即可:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control \COM Name Arbiter,
删除数值项ComDB即可。
但是随着业务的扩展,面对的客户越来越高端,对我们的软件要求也从细节上做出了更高要求(所谓的智能化),所以一直以来也想找个更好用的枚举电脑串口的方法。
运行结果:
说明:我电脑的真实串口是com1,虚拟串口com8---14:
下载地址: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的同行们致敬!
推荐阅读