styledream 发表于 2020-2-16 16:03:14

[已解决]设备管理器启用与禁用显卡问题

本帖最后由 styledream 于 2020-2-29 11:21 编辑

#include <SetupAPI.au3>
; 禁用显卡:
Local $hDevs, $tDevInfo, $sDeviceID
$sDeviceID = "PCI\VEN_10DE&DEV_0652&SUBSYS_387A17AA&REV_A1" ; 显卡设备范例ID。
_SetupDiCreateDeviceDevs($sDeviceID, $hDevs, $tDevInfo)
$fResult = _SetupDiDisableDevice($hDevs, $tDevInfo, False) ; 启用。
If $fResult = True Then
      Msgbox(0, "", "显卡禁用成功。")
Else
      Msgbox(0, "", "错误码:" & @error)
EndIf
$fResult = _SetupDiDisableDevice($hDevs, $tDevInfo, True) ; 禁用
_SetupDiDestroyDeviceInfoList($hDevs) ; 销毁设备信息集。
; _CM_Disable_DevNode / _CM_Enable_DevNode 同样可以实现对硬件的禁用启用操作。
; 但_CM_Enable_DevNode不能启用设备管理器或_SetupDiDisableDevice禁用过的硬件。


我的笔记本独立显卡有些问题,每次开机后都要先启用独立显卡,再禁用来获取最佳分辨率
我参考了P版的UDF例子 http://www.autoitx.com/forum.php ... 0543&extra=page%3D1
脚本运行后返回错误代码87,好像是获取不到硬件
现求助论坛的大神们帮忙看看问题

afan 发表于 2020-2-16 16:38:56

是不是64位的问题?添加 #AutoIt3Wrapper_UseX64=n 试试

styledream 发表于 2020-2-16 17:19:29

afan 发表于 2020-2-16 16:38
是不是64位的问题?添加 #AutoIt3Wrapper_UseX64=n 试试

谢谢afan版主解答
电脑系统Win10 企业版 64位
已将代码添加到脚本中,但还是提示 错误码:87

#AutoIt3Wrapper_UseX64=n
#include <SetupAPI.au3>
; 禁用显卡:
Local $hDevs, $tDevInfo, $sDeviceID
$sDeviceID = "PCI\VEN_10DE&DEV_0652&SUBSYS_387A17AA&REV_A1" ; 显卡设备范例ID。
_SetupDiCreateDeviceDevs($sDeviceID, $hDevs, $tDevInfo)
$fResult = _SetupDiDisableDevice($hDevs, $tDevInfo, False) ; 启用。
If $fResult = True Then
      Msgbox(0, "", "显卡禁用成功。")
Else
      Msgbox(0, "", "错误码:" & @error)
EndIf
$fResult = _SetupDiDisableDevice($hDevs, $tDevInfo, True) ; 禁用
_SetupDiDestroyDeviceInfoList($hDevs) ; 销毁设备信息集。

haijie1223 发表于 2020-2-16 19:47:27

你搞错参数了吧。需要的是 设备范例id,不是硬件id。 在win10里面是设备实例路径。
$sDeviceID = "设备实例路径" ; 显卡设备范例ID。

zghwelcome 发表于 2020-2-16 19:52:14

4楼发哥提到的问题,并修改函数 _SetupDiOpenDeviceInfo、加上申请管理员权限#RequireAdmin

**** Hidden Message *****

haijie1223 发表于 2020-2-16 20:01:09

zghwelcome 发表于 2020-2-16 19:52
4楼发哥提到的问题,并修改函数 _SetupDiOpenDeviceInfo、加上申请管理员权限#RequireAdmin

**** 本 ...

不光这一个函数,所有      DllStructSetData( xxxx, "Size",28)都需要修改。
但是他的代码运行在32位模式下,改不改都不影响。

zghwelcome 发表于 2020-2-16 20:06:04

haijie1223 发表于 2020-2-16 20:01
不光这一个函数,所有      DllStructSetData( xxxx, "Size",28)都需要修改。
但是他的代码运行在32位 ...
改了兼容64位解释器

styledream 发表于 2020-2-17 00:24:21

haijie1223 发表于 2020-2-16 19:47
你搞错参数了吧。需要的是 设备范例id,不是硬件id。 在win10里面是设备实例路径。
$sDeviceID = "设备实 ...

感谢发哥指导,待我去试试

styledream 发表于 2020-2-17 00:25:28

zghwelcome 发表于 2020-2-16 19:52
4楼发哥提到的问题,并修改函数 _SetupDiOpenDeviceInfo、加上申请管理员权限#RequireAdmin

**** 本 ...

多谢兄弟指导,要修改的内容标注得清晰明了,待我测试后反馈

redapple2008 发表于 2020-2-17 09:29:46

这个我也想知道

chzj589 发表于 2020-2-17 09:59:00

zghwelcome 发表于 2020-2-16 19:52
4楼发哥提到的问题,并修改函数 _SetupDiOpenDeviceInfo、加上申请管理员权限#RequireAdmin

**** 本 ...

回复看看{:1_630:}

styledream 发表于 2020-2-17 14:18:42

haijie1223 发表于 2020-2-16 19:47
你搞错参数了吧。需要的是 设备范例id,不是硬件id。 在win10里面是设备实例路径。
$sDeviceID = "设备实 ...

修改成“设备实例路径”后已可成功禁用与启用显卡了
感谢发哥指导

styledream 发表于 2020-2-17 14:19:43

redapple2008 发表于 2020-2-17 09:29
这个我也想知道

按照2#和4#的方法后可正常使用

styledream 发表于 2020-2-17 14:24:30

zghwelcome 发表于 2020-2-16 19:52
4楼发哥提到的问题,并修改函数 _SetupDiOpenDeviceInfo、加上申请管理员权限#RequireAdmin

**** 本 ...

按照A版和发哥的方案,测试可正常禁用显卡了
P版的 SetupAPI.au3 这个UDF中包含了 LocalSecurityAuthority.au3 用于申请管理员权限
我测试过加入 #RequireAdmin,在这个UDF中不生效

haijie1223 发表于 2020-2-17 17:18:13

styledream 发表于 2020-2-17 14:18
修改成“设备实例路径”后已可成功禁用与启用显卡了
感谢发哥指导

请修改标题
页: [1] 2
查看完整版本: [已解决]设备管理器启用与禁用显卡问题