funkey Posted November 29, 2010 Posted November 29, 2010 Maybe someone of you can need this: expandcollapse popup#include <Array.au3> Local $aComPort = _GetComPorts() _ArrayDisplay($aComPort) Local $sComPort = _GetComPorts("com1") If @error Then MsgBox(16, "Error " & @error, "No matching COM port found.") Else ConsoleWrite($sComPort & @CRLF) EndIf ; #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 Programming today is a race between software engineers striving tobuild bigger and better idiot-proof programs, and the Universetrying to produce bigger and better idiots.So far, the Universe is winning.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now