ComPorts (serielle Ports) und dazugehörige Namen auflisten (WMI)

  • Hier eine kleine Funktion, die alle vorhandenen COM-Ports auflistet.
    Vllt ist das ja mal für wen ganz nützlich.

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Local $aComPort = _GetComPorts()
    _ArrayDisplay($aComPort)

    [/autoit] [autoit][/autoit] [autoit]

    Local $sComPort = _GetComPorts("com1")
    If @error Then
    MsgBox(16, "Error " & @error, "No matching COM port found.")
    Else
    ConsoleWrite($sComPort & @CRLF)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _GetComPorts
    ; Description ...: Lists all com ports and their names to a 2D array, or returns only the name of the given com port
    ; Syntax.........: _GetComPorts($sComPort = "")
    ; Parameters ....: $sComPort - Either "" (blank) for array or a string like "1" or "COM1"
    ; Return values .: Success - Either an array or a string (depends on $sComPort)
    ; Failure - -1, sets @error
    ; |1 - No matching COM port found.
    ; Author ........: funkey
    ; Date ..........: 2010, Nov 29th
    ; Modified.......:
    ; Remarks .......:
    ; Related .......:
    ; Link ..........:
    ; Example .......: Yes
    ; ===============================================================================================================================
    Func _GetComPorts($sComPort = "")
    Local $objWMIService = ObjGet("winmgmts:\\localhost\root\CIMV2")
    Local $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_PnPEntity WHERE Name LIKE '%(COM%" & StringReplace($sComPort, "COM", "") & ")'", "WQL", 48)
    Local $sRet = ""
    For $objItem In $colItems
    $sRet &= $objItem.Name & @CR
    Next
    If $sRet = "" Then Return SetError(1, 0, "")
    If $sComPort <> "" Then
    If Not StringInStr($sRet, $sComPort) Or Not StringIsInt(StringRight($sComPort, 1)) Then Return SetError(1, 0, "")
    $sRet = StringTrimRight($sRet, StringLen("COM" & StringReplace($sComPort, "COM", "")) + 4)
    Return $sRet
    EndIf
    Local $aTemp = StringSplit($sRet, @CR, 2)
    Local $aRet[UBound($aTemp) - 1][2]
    For $i = 0 To UBound($aTemp) - 2
    $aRet[$i][0] = StringTrimRight(StringTrimLeft($aTemp[$i], StringInStr($aTemp[$i], "(", 0, -1)), 1)
    $aRet[$i][1] = StringLeft($aTemp[$i], StringInStr($aTemp[$i], "(", 0, -1) - 2)
    Next
    Return $aRet
    EndFunc ;==>_GetComPorts

    [/autoit]
  • Das hier ist alles was bei mir angezeigt wird.

    C:\Dokumente und Einstellungen\User\Desktop\ComPortList.au3 (42) : ==> Variable must be of type "Object".:
    Local $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_PnPEntity WHERE Name LIKE '%(COM%" & StringReplace($sComPort, "COM", "") & ")'", "WQL", 48)
    Local $colItems = $objWMIService^ ERROR

    ?(

  • Hast Du vielleicht keine COM-Ports mehr ?

    Edit: Habs gerade am Notebook ohne COM-Ports getestet: Keine Probleme. Er findet nix und gut.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

    Einmal editiert, zuletzt von Micha_he (29. November 2010 um 22:10)

  • Hallo XP-User,

    das deutet darauf hin dass der WMI-Dienst nicht läuft, wenn ich bei mir Windows-Verwaltungsintrumentation beende erhalte ich den gleichen Fehler. Das Skript findet sogar bei mir COM-Ports von denen ich nichts wusste:

    Code
    [0]|COM3|GlobeTrotter HSxPA - Application Interface
    [1]|COM4|GlobeTrotter HSxPA - Diagnostics Interface

    der Web'n'Walk-Stick ist an USB angeschlossen und hat 2 virtuelle COM-Ports angelegt,

    mfg autoBert