当前位置: 代码迷 >> Delphi >> delphi 里面如何检测com口是不是存在
  详细解决方案

delphi 里面如何检测com口是不是存在

热度:8339   发布时间:2013-02-25 00:00:00.0
delphi 里面怎么检测com口是不是存在
如题,最好有代码,
是通过判断键值 \Device\Serial0 就可以吗?准确吗?只要判断这个键值就可以区分有没有com口吗
还是有其他的方案,请高手指点下。
------解决方案--------------------------------------------------------
procedure EnumComPorts(Ports: TStrings);
procedure Tfrmsetup.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 
   begin
   Exit;
   end ;

      //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;
EnumComPorts(COMNumberCoMboBox.Items);
  相关解决方案