我的 Windows 10 MSI 笔记本电脑有三个摄像头:
- EOS 网络摄像头实用程序(DSLR 驱动程序)
- 高清网络摄像头(内置于笔记本电脑)
- HD Pro 网络摄像头 C920(罗技 USB 摄像头)
我希望禁用EOS Webcam Utility
并HD 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
观察:。要禁用/启用设备,您可能需要使用管理员凭据/权限运行
其他资源:
-
|
,<
,>
,2>
, ETC。