本帖最后由 nmgwddj 于 2016-8-15 16:08 编辑
回复 7# chamlien
devcon 同样使用的是 SetupAPI 系列函数。我使用如下代码可以正常禁用所有显示适配器(仅复制 P 版代码稍做修改)。测试环境 Win10 14393.
#Region ;**** 参数创建于 ACNWrapper_GUI ****
#PRE_UseUpx=n
#PRE_UseX64=n
#PRE_Res_requestedExecutionLevel=None
#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
#include <SetupApi.au3>
; 枚举系统中的所有显示设备:
Local $hDevs, $tDevInfo, $aMouse[1][2] = [[0]]
$hDevs = _SetupDiGetClassDevs($DIGCF_PRESENT, "Display")
While _SetupDiEnumDeviceInfo($hDevs, $aMouse[0][0], $tDevInfo)
$aMouse[0][0] += 1
$sDescr = _SetupDiGetDeviceRegistryProperty($hDevs, $tDevInfo, $SPDRP_DEVICEDESC)
$sName = _SetupDiGetDeviceRegistryProperty($hDevs, $tDevInfo, $SPDRP_FRIENDLYNAME)
If $sName <> "" Then $sDescr = $sName
Redim $aMouse[$aMouse[0][0] + 1][2]
$aMouse[$aMouse[0][0]][0] = $sDescr ; 显示设备描述信息
$aMouse[$aMouse[0][0]][1] = _SetupDiGetDeviceInstanceID($hDevs, $tDevInfo) ; 设备范例ID
Dislabe(_SetupDiGetDeviceInstanceID($hDevs, $tDevInfo)) ; 禁用所有显示设备
WEnd
; 枚举网卡只需把"Mouse"改为"Net",磁盘则对应DiskDrive,显卡对应Display。
_SetupDiDestroyDeviceInfoList($hDevs)
_Arraydisplay($aMouse)
Func Dislabe($sDeviceID)
Local $hDevs, $tDevInfo
_SetupDiCreateDeviceDevs($sDeviceID, $hDevs, $tDevInfo)
$fResult = _SetupDiDisableDevice($hDevs, $tDevInfo, True) ; 禁用
If $fResult = True Then
Msgbox(0, "", "显示适配器禁用成功。")
Else
Msgbox(0, "", "错误码:" & @error)
EndIf
$fResult = _SetupDiDisableDevice($hDevs, $tDevInfo, False) ; 启用。
_SetupDiDestroyDeviceInfoList($hDevs) ; 销毁设备信息集。
; _CM_Disable_DevNode / _CM_Enable_DevNode 同样可以实现对硬件的禁用启用操作。
; 但_CM_Enable_DevNode不能启用设备管理器或_SetupDiDisableDevice禁用过的硬件。
EndFunc
|