如何获得计算机有几个串口,并且将其逐一显示出来以供选择

解决方案 »

  1.   

    参考
     reg.RootKey := HKEY_LOCAL_MACHINE;
             reg.OpenKey ('hardware\devicemap\serialcomm',false);
             reg.GetValueNames(ts);_____________________
    http://lysoft.7u7.net
      

  2.   

    uses
    Registry;function GetPort(Ports: TStrings; DisplayDevice: Boolean = False): Boolean;
    function GetPort(Ports: TStrings; DisplayDevice: Boolean = False): Boolean;
    var
      Reg: TRegistry;
      i: Integer;
      CommPort: PInteger;
    begin
      Ports.Clear;
      Reg := TRegistry.Create;
      try
        Reg.RootKey := HKEY_LOCAL_MACHINE;
        if Reg.OpenKey('\HARDWARE\DEVICEMAP\SERIALCOMM', False) then
        begin
          Reg.GetValueNames(Ports);
          for i := 0 to Ports.Count -1 do
          begin
            if DisplayDevice then
            begin
              New(CommPort);
              CommPort^ := StrToIntDef(Copy(Ports[i], 15, Length(Ports[i])), 0);
              Ports.Objects[i] := TObject(CommPort);
            end;
            Ports[i] := Reg.ReadString(Ports[i]);
          end;
          Reg.CloseKey;
        end;
      finally
        Reg.Free;
      end;
    end;
      

  3.   

    //读取可用串口
    function getComNames():TStringList;
    var
      reg:TRegistry;
      strName:TStringList;
      i:integer;
    begin
      strName:=TStringList.Create;
      reg:= TRegistry.Create;
      reg.RootKey:=HKEY_LOCAL_MACHINE;
      if reg.OpenKeyReadOnly('hardware\devicemap\serialcomm') then
      begin
        reg.GetValueNames(strName);
      end;
      Result:=TStringList.Create;
      for i:=0 to strName.Count-1 do
        Result.Add(reg.ReadString(strName.Strings[i]));
      reg.CloseKey;
      reg.Destroy;
    end;