找回密码
 加入
搜索
查看: 9995|回复: 28

[AU3基础] 求。禁用,启用声卡AU3源码

 火... [复制链接]
发表于 2012-2-18 23:25:06 | 显示全部楼层 |阅读模式
本帖最后由 49666684 于 2012-2-21 19:22 编辑

如题。
现在能用批处理。实现。但想知道AU3能实现否。!
@echo off 
COLOR 1f
title  禁用声卡程序
cls
echo 本程序会禁用声卡,请确认按任意键继续...
@pause
devcon disable HDAUDIO\*
exit
7楼非常强悍。。
不过美中不足就是还需要手动来查看声卡名称!
如果能自动获取到就更好了。

不过还是非常感谢

问题已解决。问题 找不到怎么改成已解决啊。。。。。这可不是我不改。。。。。
发表于 2012-2-18 23:39:55 | 显示全部楼层
找了一篇Devcon的用法,不知能否帮上你。

#列出所有PCI设备的ID
Devcon find pci\*
如:
PCI\VEN_10EC&DEV_8139&SUBSYS_813910EC&REV_10\4&172A2BDD&0&18F0: Realtek RTL8139
Family PCI Fast Ethernet NIC
其中 : 号前面的 PCI\VEN_10EC 就是设备 ID 号。后面的是设备名称。ID 号也可以用 *DEV_8139* 来表示。
#开启设备命令:
Devcon enable PCI\VEN_10EC

或者写成
Devcon enable *DEV_8139*

#禁用设备命令:
Devcon disable PCI\VEN_10EC
或者写在成
Devcon disable *DEV_8139*

禁用设备的命令是:
devcon disable 设备ID
这个设备ID怎么得到呢?可以通过设备管理器,在设备上点击“属性”,在“详细信息”标签里面有个下拉列表,选择“设备范例Id”,下面显示出来的就是设备ID,直接CTRL+C就OK了。

2、设备ID不能直接输入,否则会把ID开头相同的一大堆设备都操作一遍,最后还会出几个错误提示;加上双引号也不行,会提示没有设备被禁用/启用;必须这样写:@"设备ID",所以最后的命令格式是:
devcon disable @"设备ID"
如:
devcon disable @"PCI\VEN_10EC&DEV_8139&SUBSYS_813910EC&REV_10\4&172A2BDD&0&18F0"

各设备分类(class)标准 列表
00 Use class information in the Interface Descriptors
01 Audio
02 Communications and CDC Control
03 HID (Human Interface Device)
05 Physical
06 Image
07 Printer
08 Mass Storage
09 Hub
0A CDC-Data
0B Smart Card
0D Content Security
0E Video
0F Personal Healthcare
DC Diagnostic Device
E0 Wireless Controller
EF Miscellaneous
FE Application Specific
FF Vendor Specific

关闭类设备:
devcon.exe disable USB\Class_08

禁用U盘,即删除U盘,不管你有N个U盘统统一起删除
devcon.exe disable USB\Class_06

禁用数码相机,包括数码相机附带的可移动磁盘
devcon.exe disable USB\Class_03

禁用USB鼠标&键盘
devcon.exe disable USB\Class_ff
 楼主| 发表于 2012-2-19 01:25:29 | 显示全部楼层
这个是DOS下用的吧
 楼主| 发表于 2012-2-19 01:25:51 | 显示全部楼层
我是要看看AU3不调用DOS命令是否能够实现
发表于 2012-2-19 02:37:13 | 显示全部楼层
devcon.exe这个win7里没找到
发表于 2012-2-19 10:08:42 | 显示全部楼层
Devcon提取硬件ID有点繁琐,直接用Everest检测导出声卡项,然后在里面提取硬件ID。就像GHOST系统里面智能安装驱动一样
发表于 2012-2-19 14:12:25 | 显示全部楼层
本帖最后由 lixiaolong 于 2012-2-19 14:13 编辑

支持Win7 32位,64位没有测试.
#include <SetupApi.au3>

$Sound_Name = "Conexant SmartAudio HD"; 请在设备管理器中查看自己的设备名称.

Local $hDevs, $tDevInfo, $tDevInfo, $aSound[1][2] = [[0]]
$hDevs = _SetupDiGetClassDevs($DIGCF_PRESENT, "media")

While _SetupDiEnumDeviceInfo($hDevs, $aSound[0][0], $tDevInfo)
        $sDescr = _SetupDiGetDeviceRegistryProperty($hDevs, $tDevInfo, $SPDRP_DEVICEDESC)

        $aSound[$aSound[0][0]][0] = $sDescr
        $aSound[$aSound[0][0]][1] = _SetupDiGetDeviceInstanceID($hDevs, $tDevInfo)
        
        If $aSound[$aSound[0][0]][0] == $Sound_Name Then
                $fResult = _SetupDiDisableDevice($hDevs, $tDevInfo, True) ; 禁用
                If $fResult = True Then
                        MsgBox(0, "", "声卡禁用成功。")
                Else
                        MsgBox(0, "", "错误码:" & @error)
                EndIf
                $fResult = _SetupDiDisableDevice($hDevs, $tDevInfo, False) ; 启用
                ExitLoop
        EndIf
WEnd


(参考pusofalse版主的帖子)
发表于 2012-2-19 20:47:41 | 显示全部楼层
代码收下......
发表于 2012-2-19 21:03:40 | 显示全部楼层
回复 7# lixiaolong
牛人啊!你太厉害
发表于 2012-2-19 21:07:12 | 显示全部楼层
回复 7# lixiaolong


    支持,很不错。
发表于 2012-2-20 10:37:11 | 显示全部楼层
谢谢共享,支持楼主
 楼主| 发表于 2012-2-20 18:50:08 | 显示全部楼层
支持Win7 32位,64位没有测试.


()
lixiaolong 发表于 2012-2-19 14:12



   
非常不错。。
不过美中不足就是还需要手动来查看声卡名称!
如果能自动获取到就更好了。

不过还是非常感谢
发表于 2012-2-20 20:17:57 | 显示全部楼层
回复 12# 49666684
WMI因该可以的,奈何测试失败
_MediaDrivername()
Func _MediaDrivername()
        Local $wbemFlagReturnImmediately = 0x10
        Local $wbemFlagForwardOnly = 0x20
        Local $colItems = ""
        Local $strComputer = "localhost"
        Local $objWMIService = ObjGet("winmgmts:\" & $strComputer & "\root\CIMV2")
        $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_PnPSignedDriver", "WQL", _
                                          $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
        For $objItem In $colItems
                If $objItem.DeviceClass = "MEDIA"  And $objItem.CompatID<>"" Then 
                                MsgBox(1,"设备名称为" ,$objItem.DeviceName )
                EndIf
        Next
EndFunc
 楼主| 发表于 2012-2-20 20:25:45 | 显示全部楼层
.....楼。。确实失败了。。。。囧
发表于 2012-2-20 20:41:07 | 显示全部楼层
给你的只是得到设备名称的码,如果要禁用启用的话我理解要用startservice()和stopservice()
奈何。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-25 15:16 , Processed in 0.080678 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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