理论优先

理论优先

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

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

(如果有帮助的话,我在华硕 Zenbook Prime UX32VD 上使用 Windows 7。)

答案1

理论优先

  • 我们需要定期检查是否外部网络摄像头已连接至计算机。
  • 当。。。的时候外部的网络摄像头是插入, 这内置应该已禁用
  • 然后内置设备应该已启用回到外部的相机是拔掉插头

初步步骤

建议的解决方案使用批处理脚本和任务调度技术来处理所有这些问题。在真正进入关键部分之前,我们需要做几件事。

获取设备控制台 (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 可能分配给制造商在某种程度上兼容的其他设备。

来源:发现设备的硬件 ID 和设备安装程序类

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

创建批处理脚本

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

    @echo 关闭
    
    REM 确保至少有 2 个参数
    如果“%~2”==“”退出/ b 2
    
    REM 验证 devcon.exe 没有丢失
    cd /d “%〜dp0”
    如果不存在 devcon.exe exit /b 3
    
    REM 如果未指定,则将间隔设置为 15 秒
    如果“%~3”==“”(设置间隔=15)否则(设置间隔=%3)
    
    :轮询
    对于 /f "tokens=1 delims=\" %%G 在 ("%~2") 中执行 (devcon.exe find *%%G* | findstr /i /c:"%~2" >nul)
    转到:检查%错误级别%
    
    :检查0
    devcon.exe 状态“%~1”| findstr /i /c:“disabled”> nul
    如果 %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

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

例如,如果你获得如下设备 ID:

USB\VID_1D4D&PID_1002&REV_0039&MI_00

通用 ID 为:

USB\VID_1D4D&PID_1002

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

安排时间

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

  1. 打开任务计划程序 ( taskschd.msc),然后单击操作 > 创建任务
  2. 说出它的名字WebcamCheck
  3. 一般的选项卡,点击更改用户或组
  4. system在文本框中输入内容,点击检查姓名,然后点击好的
  5. 启用以最高权限运行选项。
  6. 更改配置Windows 7、Windows Server 2008 R2
  7. 选择触发器选项卡,然后单击新的
  8. 更改开始任务登录时,然后按好的
  9. 切换到操作选项卡,然后单击新的
  10. 输入"X:\Path\to\WebcamCheck.cmd"程序/脚本文本框,用实际的文件路径替换它。
  11. 输入"XXX\VID_YYYY&PID_ZZZZ" "AAA\VID_BBBB&PID_CCCC"添加参数文本框,用适当的值替换设备 ID。
  12. 点击状况Tab 键并取消选中仅当计算机使用交流电源时才启动任务选项。
  13. 选择设置选项卡,并取消选中允许按需运行任务如果任务运行时间超过字段。
  14. 启用错过预定的启动时间后尽快运行任务选项。
  15. 将所有其他设置保留为默认值,然后按好的

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


更新

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

@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

答案2

您可以尝试通过控制面板或设备管理器禁用网络摄像头。这样可以安装外部网络摄像头,并且该摄像头是当前唯一正在运行的网络摄像头。之后,您可以随时再次启用该设备。

希望这可以帮助。

相关内容