Всем привет.
Есть задача получить список подключенных устройств и узнать их ID + сколько их и установить драйверы в зависимости от их состояния.
Хочется узнать как можно проще получить:
Список подключенных устройств с нужными VID и PID(полный список, а не только их ID)
Посчитать сколько устройств с одними VID и PID и сколько с другими.
Узнать только VID и PID этих устройств(чтобы в дальнейшем их перезапускать по их ID)
Узнать их состояние, т.е.: Проблема, Запущено.
Пока есть такие мысли:
Тут у меня определяется кол-во пультов, их ID, но хочется это делать как-то более оптимально и меньшим-кол-вом кода, к примеру с помощью регулярок, но я не силен в них.
Есть задача получить список подключенных устройств и узнать их ID + сколько их и установить драйверы в зависимости от их состояния.
Хочется узнать как можно проще получить:
Список подключенных устройств с нужными VID и PID(полный список, а не только их ID)
Посчитать сколько устройств с одними VID и PID и сколько с другими.
Узнать только VID и PID этих устройств(чтобы в дальнейшем их перезапускать по их ID)
Узнать их состояние, т.е.: Проблема, Запущено.
Пока есть такие мысли:
Код:
#include <Array.au3>
#include <Constants.au3>
#RequireAdmin
#pragma compile(Console, True)
Func _StdOut($pid)
Local $data
ProcessWaitClose($pid)
$data = StdOutRead($pid)
If $data Then
Return $data
Else
MsgBox(0, "", "Не удалось получить вывод программы.")
Exit(4)
EndIf
EndFunc
Func _Encoding_ANSIToOEM($strText)
Local $sBuffer = DllStructCreate("char[" & StringLen($strText) + 1 & "]")
Local $aRet = DllCall("User32.dll", "int", "CharToOem", "str", $strText, "ptr", DllStructGetPtr($sBuffer))
If Not IsArray($aRet) Then Return SetError(1, 0, '') ; DLL error
If $aRet[0] = 0 Then Return SetError(2, $aRet[0], '') ; Function error
Return DllStructGetData($sBuffer, 1)
EndFunc
$Title = "TEST"
$etc = @ScriptDir & "\etc\"
$DrvDamaskPath=$etc & "Drv\Damask\*.inf"
Global Const $IDSvetovod="FTDIBUS\VID_0403+PID_6001"
Global Const $IDamask="USB\VID_1A86&PID_7523"
Local $pid = Run("pnputil.exe /enum-devices /connected", "", @SW_HIDE, $STDOUT_CHILD) ;Выводим список подключенных устройств
Local $DataSearch = _StdOut($pid)
$ArrayDataSearch=StringSplit($DataSearch,@CRLF,0) ;Делим строки на подстроки
$NewArraySvetovod = _ArrayFindAll($ArrayDataSearch,$IDSvetovod,"","",0,1)
$NewArrayDamask = _ArrayFindAll($ArrayDataSearch,$IDamask,"","",0,1)
$CountDevicesSvetovod=Ubound($NewArraySvetovod)
$CountDevicesDamask=Ubound($NewArrayDamask)
ConsoleWrite(_Encoding_ANSIToOEM(" CheckConnDevices()>> Кол-во пультов ""Дамаск"": "& $CountDevicesDamask) & @CRLF)
_ArrayDisplay($NewArrayDamask)
for $i=0 To UBound($NewArrayDamask)-1
msgbox(0,"D",$ArrayDataSearch[$NewArrayDamask[$i]])
Next
ConsoleWrite(_Encoding_ANSIToOEM(" CheckConnDevices()>> Кол-во пультов ""Световод"": "& $CountDevicesSvetovod) & @CRLF)
_ArrayDisplay($NewArraySvetovod)
for $i=0 To UBound($NewArraySvetovod)-1
msgbox(0,"S",$ArrayDataSearch[$NewArraySvetovod[$i]])
Next
Тут у меня определяется кол-во пультов, их ID, но хочется это делать как-то более оптимально и меньшим-кол-вом кода, к примеру с помощью регулярок, но я не силен в них.
Вложения
-
3 пульт.PNG4.2 КБ · Просмотры: 2
-
ID второго пульта.PNG2.7 КБ · Просмотры: 1
-
ID первого пульта.PNG2.7 КБ · Просмотры: 2
-
ID третьего пульта.PNG4 КБ · Просмотры: 2
-
Два одинаковых пульта.PNG5 КБ · Просмотры: 3
-
Список устройств в pnputil.PNG22.1 КБ · Просмотры: 3
-
Три пульта.PNG2.3 КБ · Просмотры: 3