10 Years of Service
66%
[HIDE-THANKS]
[/HIDE-THANKS]
Code:
>#include "DeviceAPI.au3"
;Смысл программы в том, чтобы закрывая окна Мастера Нового Оборудования,
; она считала количество таких закрытых окон и сравнивала это кол-во
; с текущим количеством неизвестных устройств, а когда кол-во последних
; будет равно количеству закрытых окон (система установит все что может
; установить), мы запустим установку неизвестных устройств.
;
;Можно конечно из окна Мастера нового оборудования из WindowText брать
; наименование конкретного неизвестного устройства, затем находить его в
; текущем массиве и выбивать из "обоймы", но это уже лишнее, хотя и точнее.
$wcount = 0
;Перебирая окна, закрываем паразитные и ведем статистику
Do
$var = WinList()
For $i = 1 to $var[0][0]
If $var[$i][0] <> "" AND BitAnd( WinGetState($var[$i][1]), 2 ) Then
Select
Case $var[$i][0] = "Изменение параметров системы"
WinClose("Изменение параметров системы")
Case $var[$i][0] = "Мастер нового оборудования"
WinClose("Мастер нового оборудования")
$wcount+=1
EndSelect
EndIf
Next
Until $wcount=GetCurrentUnknownDevicesCount()
;Если все сходится, то завершаем работу
MsgBox(64,"","Неизвестных устройств: " & $wcount)
;=======================================================================
; Функция подсчета неизвестных устройств в данный момент
;=======================================================================
Func GetCurrentUnknownDevicesCount()
$i=0
;Строим список классов устройств
_DeviceAPI_GetAllDevices()
;Просматривая устройства, считаем количество устройств с пустымы класом и идентификатором
While _DeviceAPI_EnumDevices()
$classname = _DeviceAPI_GetClassName(_DeviceAPI_GetDeviceRegistryProperty($SPDRP_CLASSGUID))
$classGUID = _DeviceAPI_GetDeviceRegistryProperty($SPDRP_CLASSGUID)
If $classname="" AND $classGUID="" Then $i+=1
WEnd
;Очищаем за собой
_DeviceAPI_DestroyDeviceInfoList()
Return $i
EndFunc