Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   belegte ComPorts anzeigen, wie? (https://www.delphipraxis.net/152800-belegte-comports-anzeigen-wie.html)

Steph.Delphi 7. Jul 2010 13:47

belegte ComPorts anzeigen, wie?
 
Hallo
Gibt es einen Delphi Befehl mit dem man rausbekommen kann, welche ComPorts unter Windows gerade in Verwendung sind? Noch perfekter als nur die Info belegt ja/nein wäre natürlich auch noch den Text zu kriegen, den Windows im Geräte Manager vor den Port schreibt. Da mehrere Geräte verbunden sind könnte man so recht einfach das richtige finden, geht aber sicher auch anders.

Wäre nett, wenn da Jemand nen Tip hätte.

ChrisE 7. Jul 2010 14:00

AW: belegte ComPorts anzeigen, wie?
 
Hallo,

ich bin sonst kein Freund von Antworten die nur Links enthalten, aber hier mal ein Thread der dir sicher weiter helfen sollte: http://www.delphipraxis.net/118592-c...-auslesen.html.

Noch kurz anbei:
  • Die Namen wie sie im Gerätemanager stehen sind die Friendlynames.
  • Ob es einen COM-Port gibt und ob er belegt ist, lässt sich auch über ausprobieren herausbekommen (alle COM-Ports von 1-256 durchprobieren)

Greez, Chris

P.S.: Willkommen in der DP :dp:

Cyberbob 7. Jul 2010 15:35

AW: belegte ComPorts anzeigen, wie?
 
Welche es gibt, müsste doch in der Registry stehen. Alles ausprobieren ist doch etwas overhead und wäre zuviel des guten. wie machen das andere Tools?
zum auflisten der vorhandenen ports findet sich hier auch einiges in der dp (ich ha mal was aus der codesammlung in einem meiner programme genutzt)

Reinhard Kern 7. Jul 2010 18:15

AW: belegte ComPorts anzeigen, wie?
 
Zitat:

Zitat von ChrisE (Beitrag 1034039)
...[*] Ob es einen COM-Port gibt und ob er belegt ist, lässt sich auch über ausprobieren herausbekommen (alle COM-Ports von 1-256 durchprobieren)

Hallo,

die Frage ist, was heisst belegt genau: man kann nur feststellen, dass ein COM-Port z.B. von einem laufenden Fax-Programm benutzt wird. Läuft das Fax-Programm gerade nicht, ist der COM-Port für das System frei.

Ob an einem Com-Port was angeschlossen ist, z.B. ein Fax-Modem, lässt sich überhaupt nicht sicher feststellen (es kann ja auch abgeschaltet sein), und jeder Versuch das festzustellen, kann das angeschlossene Gerät stören bis hin zum Zusammenbruch.

Gruss Reinhard

mkinzler 7. Jul 2010 18:31

AW: belegte ComPorts anzeigen, wie?
 
CrossPost DF

Cyberbob 7. Jul 2010 19:58

AW: belegte ComPorts anzeigen, wie?
 
Es ist ein Unterschied, ob ich meinen USB-Seriell-Wandler a mein Laptop angeschlossen habe oder nicht. Etwas ganz anderes ist es, ob ich in einem meiner Programme dann auch noch den Port nutze.
Dann kommt noch die Frage, was das genau für ein Port ist und von welchem Programm er wofür genutzt wird. (Com-Port, Bluetooth, GPS, etc.)
Ich hab zum beispiel im moment keinen Wandler dran hängen und trotzdem werden mir von Windows 3 Ports als Belebt angezeigt!

ChrisE 8. Jul 2010 07:05

AW: belegte ComPorts anzeigen, wie?
 
Hallo,

Zitat:

Zitat von Cyberbob (Beitrag 1034067)
...Welche es gibt, müsste doch in der Registry stehen. Alles ausprobieren ist doch etwas overhead und wäre zuviel des guten...

also ich habe mich ja auch schon damit beschäftigt. Und es wird ja auch durchaus so von anderen vorgeschlagen http://www.delphipraxis.net/811647-post3.html in dem Post den ich in #2 vorgeschlagen habe. Also sowohl Registry und SetupAPI als auch Durchprobieren.

Das man schlussendlich per SW schwer sagen kann, ob dieser benutzt werden darf - was ja etwas völlig anderes ist als ob er belegt ist - dass ist tatsächlich schwer :-)

Aber das haben ja hier auch schon ein paar andere Festgestellt :-)

Greez, Chris

hathor 9. Jul 2010 11:35

AW: belegte ComPorts anzeigen, wie?
 
Zeigt belegte COMPORTS an:

Delphi-Quellcode:
.
.
  private
    { Private declarations }
    procedure InitializeSerialPorts;
    procedure WMDeviceChange(Var Msg:TMessage); message WM_DEVICECHANGE;
.
.
procedure TForm1.WMDeviceChange(Var Msg:TMessage);
begin
if Msg.Msg=WM_DEVICECHANGE then BEGIN
WindowsBeep(1000,50);
InitializeSerialPorts;
END;
end;

procedure TForm1.InitializeSerialPorts;
var
  port: string;
  i: Integer;
  config: TCommConfig;
  cfsize: DWORD;
begin
  for i := 1 to 16 do //MAX_NO_OF_SERIAL_PORTS
  begin
    if Components[i] is TCheckbox then TCheckbox(Components[i]).checked:=false;
    port := Format('COM%d', [i]);
    cfsize := sizeof(config);
    if GetDefaultCommConfig(PChar(port), config, cfsize) then
    case i of
    1: Checkbox1.checked:=true;
    2: Checkbox2.checked:=true;
    3: Checkbox3.checked:=true;
    4: Checkbox4.checked:=true;
    5: Checkbox5.checked:=true;
    6: Checkbox6.checked:=true;
    7: Checkbox7.checked:=true;
    8: Checkbox8.checked:=true;
    9: Checkbox9.checked:=true;
    10: Checkbox10.checked:=true;
    11: Checkbox11.checked:=true;
    12: Checkbox12.checked:=true;
    13: Checkbox13.checked:=true;
    14: Checkbox14.checked:=true;
    15: Checkbox15.checked:=true;
    16: Checkbox16.checked:=true;
    end;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz