连接外部网络摄像头时自动禁用集成网络摄像头?

oKt*_*iTe 1 webcam windows-7 zenbook

我经常将笔记本电脑用作台式机,大约有 75% 的时间。作为桌面设置,它具有外部连接的显示器、扬声器、键盘、鼠标和网络摄像头——后三个通过 USB 连接。
然后将其定位为使其集成的网络摄像头无法用于面部识别和视频聊天,但我使用的某些程序不提供任何选择默认网络摄像头的方法。

所以我想知道是否有任何方法可以通过实用程序、脚本或其他方式在连接外部网络摄像头时自动禁用内置网络摄像头。

(如果有帮助,我在 Asus Zenbook Prime UX32VD 上使用 Windows 7。)

and*_*415 5

理论第一

  • 我们需要定期检查的是否外接摄像头连接到计算机上。
  • 插入外部网络摄像头,应禁用内置摄像头。
  • 然后拔下外部摄像头后应重新启用内置设备。

预备步骤

提议的解决方案使用批处理脚本和任务调度技术来处理所有这些。在我们真正跳到多汁的部分之前,我们需要做一些事情。

获取设备控制台 (DevCon) 实用程序

DevCon是一个命令行工具,可显示有关设备的详细信息,并允许您从命令行搜索和操作设备。DevCon 启用、禁用、安装、配置和删除本地计算机上的设备,并显示有关本地和远程计算机上设备的详细信息。

  1. .cab根据操作系统下载相应的软件包:

  2. 打开.cab存档并提取名为fil[some letters and numbers]. 它应该是大约 80 KB。

  3. 将其重命名为devcon.exe.

注意为了启用/禁用任何设备,devcon.exe必须以管理员权限运行。

确定所需的硬件标识符

Windows 通过使用一组特殊的标识符来标识设备及其所属的安装程序类。这些标识符用于将硬件设备与允许它们与 Windows 通信的设备驱动程序进行匹配。

一个或多个设备 ID 由其制造商分配给设备。其中之一,硬件 ID,非常具体 - 取决于设备的品牌、型号,甚至固件版本。其他设备 ID 也被分配,并且更通用,这些 ID 可能被分配给制造商提供的其他设备,这些设备在某种程度上是兼容的。

来源:发现设备的硬件 ID 和设备设置类

  1. 插入外部网络摄像头。
  2. 打开设备管理器 ( devmgmt.msc)。
  3. 在列表中找到您的内置摄像头。
  4. 右键单击该设备的条目,然后单击“属性”
  5. 选择详细信息选项卡,然后从属性列表中选择硬件 ID
  6. 右键单击显示的第一个值并复制它。记下某处的价值。
  7. 对外部网络摄像头重复步骤 3-6。

创建批处理脚本

  1. 将以下代码另存为WebcamCheck.cmd

    @回声关闭
    
    REM 确保至少有 2 个参数
    如果 "%~2" == "" 退出 /b 2
    
    REM 验证 devcon.exe 没有丢失
    cd /d "%~dp0"
    如果不存在 devcon.exe exit /b 3
    
    如果未指定,REM 将间隔设置为 15 秒
    if "%~3" == "" (set interval=15) else (set interval=%3)
    
    :轮询
    for /f "tokens=1 delims=\" %%G in ("%~2") do (devcon.exe find *%%G* | findstr /i /c:"%~2" >nul)
    转到:检查%errorlevel%
    
    :check0
    devcon.exe 状态 "%~1" | findstr /i /c:"disabled" >nul
    if %errorlevel% == 1 (devcon.exe 禁用 "%~1")
    
    :等待
    超时 /t %interval% /nobreak >nul
    转到:投票
    
    :检查1
    devcon.exe 状态 "%~1" | findstr /i /c:"disabled" >nul
    如果 %errorlevel% == 0 (devcon.exe 启用 "%~1")
    转到:等待
    
  2. 复制devcon.exe文件并粘贴到与您刚刚保存的文件相同的目录中。

这个怎么运作

该脚本采用三个参数:第一个是目标设备 ID(内置网络摄像头);第二个是触发设备ID(外部网络摄像头);第三个是轮询间隔(以秒为单位),它是可选的。

首先,脚本将确保有足够的参数,并且devcon.exe不会丢失。

当未指定轮询间隔时,将改为使用默认值(15 秒)。该值用于确定每次设备检查之间应经过的秒数。降低该值意味着检测速度更快,这反过来意味着更多的系统开销。在尝试不同的值之前,先用默认值进行测试,看看效果如何。无论哪种方式,我都不建议低于 10 秒。

批处理脚本需要使用以下格式的通用设备 ID:

XXX\VID_YYYY&PID_ZZZZ
Run Code Online (Sandbox Code Playgroud)

XXX是设备类(例如 USB、PCI 等);YYYY是供应商 ID,分配给硬件制造商的唯一值;ZZZZ 是产品 ID,用于标识设备型号。

例如,如果您有这样的设备 ID:

USB\VID_1D4D&PID_1002&REV_0039&MI_00
Run Code Online (Sandbox Code Playgroud)

通用 ID 将是:

USB\VID_1D4D&PID_1002
Run Code Online (Sandbox Code Playgroud)

检查触发设备(外部网络摄像头)是否已连接后,脚本将禁用或启用目标设备(内置网络摄像头),除非它已被禁用/启用。

调度它

我们现在唯一需要的是让批处理脚本在登录时自动启动。

  1. 打开任务计划程序 ( taskschd.msc) 并单击操作 > 创建任务
  2. 命名它WebcamCheck
  3. 在“常规”选项卡中,单击“更改用户或组”
  4. system在文本框中键入,单击Check Names,然后单击OK
  5. 启用以最高权限运行选项。
  6. Configure for值更改为Windows 7, Windows Server 2008 R2
  7. 选择触发器选项卡,然后单击新建
  8. 更改开始执行任务,以在登录,然后按OK
  9. 切换到操作选项卡,然后单击新建
  10. "X:\Path\to\WebcamCheck.cmd"Program/script文本框中键入,将其替换为实际文件路径。
  11. "XXX\VID_YYYY&PID_ZZZZ" "AAA\VID_BBBB&PID_CCCC"添加参数文本框中键入,用正确的值替换设备 ID。
  12. 单击条件选项卡并取消选中仅在计算机使用交流电源时启动任务选项。
  13. 选择设置选项卡,并取消选中的允许任务按需运行停止任务,如果它的运行速度比长的字段。
  14. 错过计划的启动后尽快启用运行任务选项。
  15. 将所有其他设置保留为默认值,然后按OK

注意如果您希望尽快禁用内置网络摄像头,请在登录前连接外置摄像头。


更新

这是批处理脚本的简化版本,仅在启动然后退出时才会检查外部摄像头:

@echo off

REM ensure there at least 2 parameters
if "%~2" == "" exit /b 2

REM verify devcon.exe is not missing
cd /d "%~dp0"
if not exist devcon.exe exit /b 3

:check
for /f "tokens=1 delims=\" %%G in ("%~2") do (devcon.exe find *%%G* | findstr /i /c:"%~2" >nul)
goto :check%errorlevel%

:check0
devcon.exe status "%~1" | findstr /i /c:"disabled" >nul
if %errorlevel% == 1 (devcon.exe disable "%~1")
exit /b

:check1
devcon.exe status "%~1" | findstr /i /c:"disabled" >nul
if %errorlevel% == 0 (devcon.exe enable "%~1")
exit /b
Run Code Online (Sandbox Code Playgroud)