Einzelnen Beitrag anzeigen

BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: komisches Verhalten der RS232-Schnittstelle/ ComPort

  Alt 5. Okt 2009, 07:44
Also wollte hier nochmal folgende Ergänzung machen für das Problem an den ComPorts. Nach einer etwas intensiveren Suche habe ich noch folgende alternative Routine gefunden, die die Comports auflistet. Diese scheint auch deutlich besser zu funktionieren. bei der Verwendung dieser Routine verschwindet der ComPort/ RS232-Schnittstelle nämlich nicht, wenn die open-Funktion der DLL aufgerufen wird. dadurch konnte ich die Problematik, die hier gestellt war, lösen.

alternative Routine (hier aus der DP):
Delphi-Quellcode:
procedure TComport.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
    raise Exception.Create('Fehler beim Registry öffnen!');
  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 - 1);
        TmpPorts.Add(Data);
        Inc(Index);
      end
      else
        if ErrCode <> ERROR_NO_MORE_ITEMS then
          raise Exception.Create('Fehler Registry auslesen!');

    until (ErrCode <> ERROR_SUCCESS) ;
    TmpPorts.Sort;
    Ports.Assign(TmpPorts);
  finally
    RegCloseKey(KeyHandle);
    TmpPorts.Free;
  end;
end;
BAMatze
2. Account Sero
  Mit Zitat antworten Zitat