串口通讯中使用了pcomm控件,现在有个问题,我是使用了232转USB装置,这样接入的串口就是随机的,怎么样能在程序里自动读取串口号呢?

解决方案 »

  1.   

    可以通过注册表来获取计算机的串口号uses Registry;procedure TFrm_Main.FormCreate(Sender: TObject);
    var
      reg: TRegistry;
      ts: TStrings;
      i: integer;
    begin
      reg := TRegistry.Create;
      reg.RootKey := HKEY_LOCAL_MACHINE;
      reg.OpenKey('hardware\DEVICEMAP\SERIALCOMM',
        false);
      ts := TStringList.Create;
      reg.GetValueNames(ts);
      ComboBox1.Clear;
      for i := 0 to ts.Count - 1 do begin
        ComboBox1.Items.Add(reg.ReadString(ts.Strings[i]));
      end;
      ts.Free;
      reg.CloseKey;
      reg.free;
      ComboBox1.ItemIndex := 0;
    end;
      

  2.   

    我试了一下,这个过程把所有的串口号都读出来了,我现在要自动获取那个232-USB设备的串口号,并且把这个号赋给程序中的portn。我要从这个口通信,调用sio_open之类的函数。请问这个功能怎么实现呢。我现在在硬件管理器里看见的USB设备的串口号是com6,这时我要让portn=6;请问调用你这个过程怎么实现呢?
      

  3.   

    procedure TFrm_Main.FormCreate(Sender: TObject);
    var
      reg: TRegistry;
      ts: TStrings;
      i: integer;
    begin
      reg := TRegistry.Create;
      reg.RootKey := HKEY_LOCAL_MACHINE;
      reg.OpenKey('hardware\DEVICEMAP\SERIALCOMM',
        false);
      ts := TStringList.Create;
      reg.GetValueNames(ts);
      ComboBox1.Clear;
      for i := 0 to ts.Count - 1 do begin
        ComboBox1.Items.Add(reg.ReadString(ts.Strings[i]));
      end;
      ts.Free;
      reg.CloseKey;
      reg.free;
      ComboBox1.ItemIndex := 0;
    end;读出来的结果是com2 com3 com4 com5 com6
      

  4.   

    用SetupAPI枚举端口,根据属性判断是否为你的USB通讯端口。
    或者从注册表枚举所有端口后,依次尝试通讯(写一个指令并读取回应看是否成功)