Seite 1 von 1

Liste "verfügbarer" Com-Ports ermitteln

Verfasst: Donnerstag 15. November 2007, 17:10
von Zap
Hallo zusammen, ich suche mir gerade nen Wolf im Inet und komme nicht weiter.

Weiß zufällig jemand von euch wie man mit unter Windows herausfinden kann welche Seriellen Schnittstellen es gibt und ob diese verfügbar sind?
Habe schon die pywin32 API durchforstet aber nichts gefunden.

Einfach nur von Com0-Com<x> durchtesten geht zwar, kommt aber nicht so gut.

Verfasst: Donnerstag 15. November 2007, 17:19
von BlackVivi
Mit PyWin32 wird eine "IDE" mitinstalliert, PythonWin. Dort gibt es unter Tools einen "Com Browser". Besonders toll ist'r nicht, aber er funktioniert.

Edit: Wie kann man einen Menschen nur so extrem falsch verstehen ._. Tut mir leid.

Verfasst: Donnerstag 15. November 2007, 17:28
von gerold
Hallo Zap!

Vielleicht ist da etwas für dich mit dabei:
http://www.microsoft.com/technet/script ... x?mfr=true

mfg
Gerold
:-)

EDIT: Sorry ich wollte eigentlich einen genaueren Link schicken, aber diese scheiß Frames...

http://www.microsoft.com/technet/script ... x?mfr=true

Verfasst: Donnerstag 15. November 2007, 18:43
von Zap
Krass, dachte das geht ein bisschen abstrakter, aber da scheint alles drin zu sein was ich brauche. Besten dank :)

Edit: Jetzt muss ich nur noch rausfinden welcher Wert mir mit Sicherheit sagen kann ob der Port verfügbar ist oder nicht. Hab StatusInfo im Blick, weiß aber noch nicht wofür die Zahlen stehen. Ist der Port frei bekomme ich eine 3 als Status, ist er belegt None. (so meine ersten Tests)
Wenn's einer genau weiß würd ich mich über Infos freuen.

Der Code von dem ich spreche: http://www.microsoft.com/technet/script ... x?mfr=true

Verfasst: Donnerstag 15. November 2007, 22:25
von Jona
du könntest auch pyserial einsetzen:

Code: Alles auswählen

import serial
i=0
while True:
    try:
            print serial.Serial(i)
            i += 1
    except: break

Code: Alles auswählen

Serial<id=0xb50490, open=True>(port='COM1', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=0, rtscts=0, dsrdtr=0)
Serial<id=0xb50490, open=True>(port='COM2', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=0, rtscts=0, dsrdtr=0)

Re: Liste "verfügbarer" Com-Ports ermitteln

Verfasst: Donnerstag 15. November 2007, 22:44
von Zap
Zap hat geschrieben:Einfach nur von Com0-Com<x> durchtesten geht zwar, kommt aber nicht so gut.
Hi Jona, pySerial benutze ich bereits für die eigentlich Kommunikation aber ich will eben nicht alle Ports pollen.

Außerdem gibt es durchaus Fälle (wie ich sie heute kennen gelernt habe) wo es COM1 COM2 COM4 gibt.
Da nützt diese Abfrage nicht viel. Ausserdem würde ich bei deiner Lösung auch keinen COM2 finden wenn COM1 bereits belegt ist.
Werde mir morgen mal die win32com.client Lösung angucken. Das sieht recht Vielversprechend aus.
Würde mich gesagt über nähere Details freuen wenn jemand welche hat ;)

Re: Liste "verfügbarer" Com-Ports ermitteln

Verfasst: Donnerstag 15. November 2007, 23:58
von gerold
Zap hat geschrieben:Würde mich gesagt über nähere Details freuen wenn jemand welche hat ;)
Hallo Zap!

Meine COMM-Ports werden in der Registry unter "HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM" aufgelistet.

Wenn das bei dir auch so ist, dann könntest du diese einfach aus der Registry auslesen.

Code: Alles auswählen

import _winreg as winreg
key = winreg.CreateKey(winreg.HKEY_LOCAL_MACHINE, r"HARDWARE\DEVICEMAP\SERIALCOMM")
data = []
i = 0
while True:
    try:
        data.append(winreg.EnumValue(key, i)[1])
        i += 1
    except WindowsError:
        break
winreg.CloseKey(key)
print data

Code: Alles auswählen

[u'COM1', u'COM2', u'COM3', u'COM4', u'COM6', u'COM7',
u'COM15', u'COM16', u'COM17', u'COM18', u'COM19', u'COM20', 
u'COM21', u'COM22', u'COM40']
mfg
Gerold
:-)