jiangjx 发表于 2010-4-9 15:55:14

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

利用‘异常’机制来获取,代码如下
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转串口,却找不到串口。

jiangjx 发表于 2010-4-9 15:55:36

各位有啥好办法没有?

jiangjx 发表于 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;

higo 发表于 2010-5-11 13:20:19

楼主方法不错,连猫口也找出来了

afei8856 发表于 2012-6-20 08:45:37

楼主能讲一下不?
页: [1]
查看完整版本: 请问用MSCOMM控件,如何枚举系统当前可用的串口,并且显示名称