搜索
bottom↓
回复: 4

请问用MSCOMM控件,如何枚举系统当前可用的串口,并且显示名称

[复制链接]

出0入0汤圆

发表于 2010-4-9 15:55:14 | 显示全部楼层 |阅读模式
利用‘异常’机制来获取,代码如下
procedure   Tform_Winzard.CheckComPort;                                         
var
        i:integer;
        ComName:String;
begin
        for   i   :=   1   to   16   do                                                                  
        begin
              try                                                                                                                                                            
                        MSComm.CommPort:=i;
                        MSComm.PortOpen:=true;
                        sleep(30);
                        MSComm.PortOpen:=false;
                        ComName:= 'COM '+IntToStr(i);
                        RadioGroup1.Items.Add(ComName);
              except
                    continue;
              end;
        end;
end;
但是用usb转串口,却找不到串口。

出0入0汤圆

 楼主| 发表于 2010-4-9 15:55:36 | 显示全部楼层
各位有啥好办法没有?

出0入0汤圆

 楼主| 发表于 2010-4-9 16:44:42 | 显示全部楼层
有一个好方法 ,刚才试了可行
通过读取注册表来获取,串口信息都是保存在注册表的这个位置

var   
      reg   :   TRegistry;   
      ts   :   TStrings;   
      i   :   integer;   
      sName,sPort:string;   
      slList:TStringList;   
  begin   
      reg   :=   TRegistry.Create;   
      ts   :=   TStringList.Create;   
      slList:=TStringList.Create;   
      try   
          reg.RootKey   :=   HKEY_LOCAL_MACHINE;   
          reg.OpenKey('hardware\devicemap\serialcomm',false);   
          reg.GetValueNames(ts);   
   
          slList.Sorted:=true;   
   
          for   i   :=   0   to   ts.Count   -1   do   begin   
              sName:=LowerCase(Trim(ts.Strings));   
              //得到串口名称   
              sPort   :=   UpperCase(Trim(reg.ReadString(sName)));   
              if   Copy(sPort,1,3)   <>   'COM'   then   Continue;   
              sPort:=Copy(sPort,4,Length(sPort));   
              sPort:=FormatFloat('000',StrToInt(sPort));   
              slList.Add(sPort);   
          end;   
   
          slPort.Clear;   
          for   i:=0   to   slList.Count-1   do   
              slPort.Add('COM'+IntToStr(StrToInt(slList.Strings)));   
      finally   
          ts.Free;   
          reg.CloseKey;   
          reg.free;   
      end;

出0入0汤圆

发表于 2010-5-11 13:20:19 | 显示全部楼层
楼主方法不错,连猫口也找出来了

出0入0汤圆

发表于 2012-6-20 08:45:37 | 显示全部楼层
楼主能讲一下不?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-9 09:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表