通过 .cmd 脚本禁用设备驱动程序不会通过应用程序禁用设备

通过 .cmd 脚本禁用设备驱动程序不会通过应用程序禁用设备

我的 Windows 10 MSI 笔记本电脑有三个摄像头:

  • EOS 网络摄像头实用程序(DSLR 驱动程序)
  • 高清网络摄像头(内置于笔记本电脑)
  • HD Pro 网络摄像头 C920(罗技 USB 摄像头)

在此处输入图片描述

我希望禁用EOS Webcam UtilityHD Webcam这样快照工具就可以找到唯一剩下的相机 Logitech HD Pro Webcam C920

我可以按如下方式禁用驱动程序。设备管理器中的图标显示设备已禁用,命令提示符中的文本告诉我它已禁用并在最后重新启用。但是快照工具仍然会找到不需要的相机。

另一个选项是找到 Logitech 摄像头的 ID 号并将其作为参数传递给CommandCam.exe

.cmd经过大量字符串处理后,我的文件看起来是这样的:

@echo off

set "EOSCAM_ID=""root\EOSWebcamSource"""
set "MSICAM1_ID=""USB\VID_5986^&PID_211C^&REV_0301^&MI_00"""
set "MSICAM2_ID=""USB\VID_5986^&PID_211C^&MI_00"""

devcon disable %EOSCAM_ID%
devcon disable %MSICAM1_ID%
devcon disable %MSICAM2_ID%
timeout /T 2 /NOBREAK

For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%a-%%b)
For /f "tokens=1-3 delims=/: " %%a in ('time /t') do (set mytime=%%a-%%b-%%c)
set imname=images\image-%mydate%__%mytime%.bmp
CommandCam.exe /delay 2000 /devnum 1 /preview /filename %imname%

devcon enable %EOSCAM_ID%
devcon enable %MSICAM1_ID%
devcon enable %MSICAM2_ID%

python python\convert.py images
explorer images

那么我该如何正确禁用驱动程序以致CommandCam.exe找不到它们?FWIW Windows 相机应用程序也继续找到 EOS 相机。有时(但并非总是),笔记本电脑相机也对应用程序可见。

答案1

@echo off && cd /d "%~dp0" 

setlocal EnableDelayedExpansion

for /f tokens^=*delims^=.^  %%i in ('"%~dp0CommandCam.exe" /devlist 2^>^&1^|findstr [0-9]\.
     ')do <con: echo\%%~i|find "HD Pro Webcam C920" >nul && set "_myCam=%%~i" 
             
for /f %%i in ('%__APPDIR__%\wbem\wmic.exe OS get LocalDateTime^|find "."
     ')do set "_d=%%~i" && <con: call set "_mydate=!_d:~0,4!-!_d:~6,2!-!_d:~4,2!"
     
if %_d:~8,2% leq 11 (set "_mytime=%_d:~8,2%-%_d:~10,2%_AM"
     )else set "_mytime=%_d:~8,2%-%_d:~10,2% PM"

set "_imname=images\image-!_mydate!_!_mytime!.bmp"
     
"%~dp0CommandCam.exe" /delay 2000 /devnum !_myCam:~0,1! /preview /filename "!_imname!"

python python\convert.py images && endlocal && goto :eof

1.使用For /F循环来CommandCam.exe /devlist查找并定义您想要的相机:

for /f tokens^=*delims^=.^  %%i in ('"%~dp0CommandCam.exe" /devlist 2^>^&1^|findstr [0-9]\.
     ')do <con: echo\%%~i|find "HD Pro Webcam C920" >nul  && set "_myCam=%%~i" 

2.用于wmic.exe OS get LocalDateTime获取日期/时间独立于区域和/或用户设置

for /f %%i in ('%__APPDIR__%\wbem\wmic.exe OS get LocalDateTime^|find "."
     ')do set "_d=%%~i" && <con: call set "_mydate=!_d:~0,4!-!_d:~6,2!-!_d:~4,2!"

3.AM/PM如果变量中不需要字符串_mytime,只需删除if条件并添加:

if %_d:~8,2% leq 11 (set "_mytime=%_d:~8,2%-%_d:~10,2%_AM"
   )else set "_mytime=%_d:~8,2%-%_d:~10,2%_PM"

set "_mytime=%_d:~8,2%-%_d:~10,2%"

4.由于CommandCam.exe接受参数并允许您定义要使用的设备,而不是移除/禁用修复/重新安装其他摄像头,尝试通过参数传递所需的摄像头:

"%~dp0CommandCam.exe" /delay 2000 /devnum !_myCam:~0,1! /preview /filename "!_imname!"

5.定义相机字符串的另一种方法是,您可以稍微放松一下,不要过度使用转义^ "

set "EOSCAM_ID= "" root\EOSWebcamSource "" "
set "MSICAM1_ID= "" USB\VID_5986 ^ &PID_211C^ &REV_0301 ^ &MI_00 "" "
set "MSICAM2_ID= "" USB\VID_5986 ^ &PID_211C ^ &MI_00 "" "

set "_EOSCAM_ID=root\EOSWebcamSource"
set "_MSICAM2_ID=USB\VID_5986&PID_211C&MI_00"
set "_MSICAM1_ID=USB\VID_5986&PID_211C&REV_0301&MI_00"

6.启用/禁用相机的一些选项:

for %%i in ("%_EOSCAM_ID%","%_MSICAM2_ID%","%_MSICAM1_ID%"
     )do <con: "%~dp0devcon.exe" disable "%%~i"

for %%i in ("%_EOSCAM_ID%","%_MSICAM2_ID%","%_MSICAM1_ID%"
     )do <con: "%~dp0devcon.exe" enable "%%~i"

7.或者使用wmic控制台:

for %%G in ("EOS Webcam Utility","HD Webcam"
)do wmic path Win32_PnPEntity where name='%%~G' call disable

for %%G in ("EOS Webcam Utility","HD Webcam"
)do wmic path Win32_PnPEntity where name='%%~G' call enable

观察:。要禁用/启用设备,您可能需要使用管理员凭据/权限运行


其他资源:

相关内容