我使用的是SPCOMM控件,但想问下怎么获取本机的串口名称呢,因为我硬件上使用2303的这个USB口转串口的IC,当接到电脑的USB口后有的电脑显示转换的是COM4有的是COM3 但是我想问下如果我使用SPCOMM这个控件能随意的修改COMM1NAME这个属性来达到我接到不同的电脑上时显示的COM4不同的名称吗?并且如果获取串口的名称呢?

解决方案 »

  1.   

    不能,获取com列表,和spcomm无关procedure EnumComPorts(Ports: TStrings);
    var
      KeyHandle: HKEY;
      ErrCode, Index: Integer;
      ValueName, Data: string;
      ValueLen, DataLen, ValueType: DWORD;
      TmpPorts: TStringList;
    begin
      ErrCode := RegOpenKeyEx(
        HKEY_LOCAL_MACHINE,
        'HARDWARE\DEVICEMAP\SERIALCOMM',
        0,
        KEY_READ,
        KeyHandle);  if ErrCode <> ERROR_SUCCESS then
        Exit;  // raise EComPort.Create(CError_RegError, ErrCode);  TmpPorts := TStringList.Create;
      try
        Index := 0;
        repeat
          ValueLen := 256;
          DataLen := 256;
          SetLength(ValueName, ValueLen);
          SetLength(Data, DataLen);
          ErrCode := RegEnumValue(
            KeyHandle,
            Index,
            PChar(ValueName),
            Cardinal(ValueLen),
            nil,
            @ValueType,
            PByte(PChar(Data)),
            @DataLen);      if ErrCode = ERROR_SUCCESS then
          begin
            SetLength(Data, DataLen);
            TmpPorts.Add(Data);
            Inc(Index);
          end
          else
            if ErrCode <> ERROR_NO_MORE_ITEMS then
              exit; //raise EComPort.Create(CError_RegError, ErrCode);    until (ErrCode <> ERROR_SUCCESS) ;    TmpPorts.Sort;
        Ports.Assign(TmpPorts);
      finally
        RegCloseKey(KeyHandle);
        TmpPorts.Free;
      end;end;
      

  2.   

    上述编码怎么出现[Error] Unit1.pas(106): Undeclared identifier: 'Ports'这样的错误呢
      

  3.   

    设备管理器里可以修改COMMNAME的,你在SPCOMM设置对应就可以了。