【已解决】如何启用与禁用显卡驱动?
本帖最后由 chamlien 于 2016-8-15 23:16 编辑本人去年入手了一台macbook,装上win10之后屏幕会花屏、闪屏、抖动,禁用显卡后即正常。
百度了花屏的问题,无一能解决的。苹果售后也无法解决,毕竟在苹果系统上正常,找微软,微软说显卡不兼容,建议重装....反正各种折腾之后,问题无法解决,我个人还是选择了禁用显卡。
现在又入手了一台外接显示器,要启用显卡才能连接显示器,然后禁用之后就可以正常使用了。现在不想每次开机都启用禁用一次显卡,所以来论坛求助。
搜索了“显卡”关键字,没有答案,麻烦各位路过解答一下,谢谢! 搜索 P 版 SupetAPI 系列函数,里面有例子根据硬件 ID 等方式禁用功能。 回复 2# nmgwddj
等级不够,只能标题搜索,能否帮忙提供一下这个函数 回复 3# chamlien
http://www.autoitx.com/forum.php?mod=viewthread&tid=10543&highlight=SetupAPI
#include <SetupAPI.au3>
; 禁用鼠标:
Local $hDevs, $tDevInfo, $sDeviceID
$sDeviceID = "HID\VID_046D&PID_C018\6&34023490&F&0000" ; 鼠标设备范例ID。
_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禁用过的硬件。
不错,刚好也有这样的需求! 回复 4# nmgwddj
很感谢,今晚回去测试一下 回复 4# nmgwddj
刚测试这个代码禁用鼠标不成功,错误代码87,禁用键盘、网卡也是一样无效。百度到devcon命令生效:
C:\Users\Administrator>devcon disable "@HID\VID_09DA&PID_C10A&COL01\6&11DC058A&0&0000"
HID\VID_09DA&PID_C10A&COL01\6&11DC058A&0&0000 : Disabled
1 device(s) disabled.
C:\Users\Administrator>devcon enable "@HID\VID_09DA&PID_C10A&COL01\6&11DC058A&0&0000"
HID\VID_09DA&PID_C10A&COL01\6&11DC058A&0&0000 : Enabled
1 device(s) are enabled.
本帖最后由 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 = []
$hDevs = _SetupDiGetClassDevs($DIGCF_PRESENT, "Display")
While _SetupDiEnumDeviceInfo($hDevs, $aMouse, $tDevInfo)
$aMouse += 1
$sDescr = _SetupDiGetDeviceRegistryProperty($hDevs, $tDevInfo, $SPDRP_DEVICEDESC)
$sName = _SetupDiGetDeviceRegistryProperty($hDevs, $tDevInfo, $SPDRP_FRIENDLYNAME)
If $sName <> "" Then $sDescr = $sName
Redim $aMouse[$aMouse + 1]
$aMouse[$aMouse] = $sDescr ; 显示设备描述信息
$aMouse[$aMouse] = _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
本帖最后由 chamlien 于 2016-8-15 18:37 编辑
回复 8# nmgwddj
嗯,上面那段代码测试成功了!然后为啥下面这段代码不可以呢
#include <SetupAPI.au3>
; 禁用鼠标:
Local $hDevs, $tDevInfo, $sDeviceID
$sDeviceID = "HID\VID_09DA&PID_C10A&COL01\6&11DC058A&0&0000" ; 鼠标设备范例ID。
_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禁用过的硬件。
回复 9# chamlien
这个不用我回答了吧,自己一行一行的调试一下,我觉得这是进步的很好的途径,加油。
{:face (332):} 不错的,学习下 回复 10# nmgwddj
哈哈,有时脑子转不过来,现在知道咋回事了。9楼的代码加上以下两行就可以了
#PRE_UseX64=n
#RequireAdmin
回到家里测试发现自己电脑上也不行的时候才发现64位不行,且要管理权限。另外,8楼的代码跟9楼的代码实际上是一致的,只是8楼的加了遍历设备,然而我却忽略最上面的#PRE_UseX64=n
感谢感谢! 有些BIOS里能禁用
页:
[1]