找回密码
 加入
搜索
查看: 6237|回复: 16

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

[复制链接]
发表于 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,好像是获取不到硬件
现求助论坛的大神们帮忙看看问题

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2020-2-16 16:38:56 | 显示全部楼层
是不是64位的问题?添加 #AutoIt3Wrapper_UseX64=n 试试
 楼主| 发表于 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) ; 销毁设备信息集。
发表于 2020-2-16 19:47:27 | 显示全部楼层
你搞错参数了吧。需要的是 设备范例id,不是硬件id。 在win10里面是设备实例路径。
$sDeviceID = "设备实例路径" ; 显卡设备范例ID。
发表于 2020-2-16 19:52:14 | 显示全部楼层
4楼发哥提到的问题,并修改函数 _SetupDiOpenDeviceInfo  、加上申请管理员权限  #RequireAdmin

游客,如果您要查看本帖隐藏内容请回复

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

**** 本 ...

不光这一个函数,所有      DllStructSetData( xxxx, "Size",28)  都需要修改。
但是他的代码运行在32位模式下,改不改都不影响。
发表于 2020-2-16 20:06:04 | 显示全部楼层
haijie1223 发表于 2020-2-16 20:01
不光这一个函数,所有      DllStructSetData( xxxx, "Size",28)  都需要修改。
但是他的代码运行在32位 ...

改了兼容64位解释器
 楼主| 发表于 2020-2-17 00:24:21 | 显示全部楼层
haijie1223 发表于 2020-2-16 19:47
你搞错参数了吧。需要的是 设备范例id,不是硬件id。 在win10里面是设备实例路径。
$sDeviceID = "设备实 ...

感谢发哥指导,待我去试试
 楼主| 发表于 2020-2-17 00:25:28 | 显示全部楼层
zghwelcome 发表于 2020-2-16 19:52
4楼发哥提到的问题,并修改函数 _SetupDiOpenDeviceInfo  、加上申请管理员权限  #RequireAdmin

**** 本 ...

多谢兄弟指导,要修改的内容标注得清晰明了,待我测试后反馈
发表于 2020-2-17 09:29:46 | 显示全部楼层
这个我也想知道
发表于 2020-2-17 09:59:00 | 显示全部楼层
zghwelcome 发表于 2020-2-16 19:52
4楼发哥提到的问题,并修改函数 _SetupDiOpenDeviceInfo  、加上申请管理员权限  #RequireAdmin

**** 本 ...

回复看看
 楼主| 发表于 2020-2-17 14:18:42 | 显示全部楼层
haijie1223 发表于 2020-2-16 19:47
你搞错参数了吧。需要的是 设备范例id,不是硬件id。 在win10里面是设备实例路径。
$sDeviceID = "设备实 ...

修改成“设备实例路径”后已可成功禁用与启用显卡了
感谢发哥指导
 楼主| 发表于 2020-2-17 14:19:43 | 显示全部楼层

按照2#和4#的方法后可正常使用
 楼主| 发表于 2020-2-17 14:24:30 | 显示全部楼层
zghwelcome 发表于 2020-2-16 19:52
4楼发哥提到的问题,并修改函数 _SetupDiOpenDeviceInfo  、加上申请管理员权限  #RequireAdmin

**** 本 ...

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

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

请修改标题
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-23 15:12 , Processed in 0.075691 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表