AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Auflistung aller 'verfügbaren' Comports
Thema durchsuchen
Ansicht
Themen-Optionen

Auflistung aller 'verfügbaren' Comports

Ein Thema von DelphiManiac · begonnen am 7. Feb 2007 · letzter Beitrag vom 8. Feb 2007
 
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#1

Auflistung aller 'verfügbaren' Comports

  Alt 7. Feb 2007, 15:37
Hallo,

ich habe folgendes Problem, ich nutzte die Komonente TComport aus dem Package bzw der Unit CPort.
Das ist eine Komponente die den Zugriff auf die Comports kapselt.

Es gibt hier eine Funktion die sich EnumComPorts nennt, ihr übergibt man eine Stringlist und bekommt sie gefüllt mit den
im System vorhandenen Comports zurück.

Beispiel:
Delphi-Quellcode:
var
 ComPorts:TStringList;
begin
..
Comports:=TStringList.Create;
EnumComPorts(Comports); // Gibt mir die vorhandenen Comports zurück
..
Das ist ja auch super, nur wenn ich mir jetzt die Comports in eine Auswahl a la Combobox oder Listbox lade habe ich folgendes Prob.
Es werden anscheinend alle Comports (die das System in der Registry hat) angezeigt, auch die die vielleicht schon durch ein anderes Programm in Benutztung sind (sehr unschön). Denn was bringt mir COM1 wenn sie belegt ist.

Ich wollte euch fragen, wie die Ports am Besten rausfiltern kann.
Bzw. ob ich eine andere Methode dafür nutzte.

hier der Funktion
EnumComports
Delphi-Quellcode:

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
    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),
{$IFDEF DELPHI_4_OR_HIGHER}
        Cardinal(ValueLen),
{$ELSE}
        ValueLen,
{$ENDIF}
        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 EComPort.Create(CError_RegError, ErrCode);

    until (ErrCode <> ERROR_SUCCESS) ;

    TmpPorts.Sort;
    Ports.Assign(TmpPorts);
  finally
    RegCloseKey(KeyHandle);
    TmpPorts.Free;
  end;

end;
Vielen Dank
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz