我想更改 Windows 10 中选定网络摄像头的名称,以便将给定的名称显示给其他应用程序(zoom/meet),而不是默认的网络摄像头名称。我已经看到我可以通过更改FriendlyName
以下注册表项来更改摄像头名称:
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{65e8773d-8f56-11d0-a3b9-00a0c9223196}\##?#USB#VID_046D&PID_082B&MI_00#6&8a7015f&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\#GLOBAL\Device Parameters
但我确信这对于所有计算机来说都不是静态的。我如何以编程方式获取此值(例如运行脚本来更改名称)以便它可以在任何 Windows 10 计算机上工作?
答案1
@echo off && cd /d "%~dp0"
setlocal EnableExtensions DisableDelayedExpansion
for /f "delims= " %%T in ('"%__AppDir__%robocopy.exe" /L . . /njh /njs')do set^ "_tab=%%~T"
for /f skip^=1^eol^=^|^tokens^=*delims^=^%_tab%^ %%i in ('
%__AppDir__%wbem\wmic.exe path CIM_LogicalDevice where "Description like '%%Cam%%'" get DeviceID^|%__AppDir__%findstr.exe .
')do <con: ^< nul set^ "_HKey=%%~i"
for /f eol^=^|^tokens^=1-2delims^=^%_tab%^ %%g in ('
%__AppDir__%Reg.exe Query "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\%_HKey%"^|%__AppDir__%findstr.exe "FriendlyName DeviceDesc"
')do ^< nul %__AppDir__%Reg.exe add "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\%_HKey: =%" /f /v %%~g /t %%~h /d "EasyCamera"
endlocal & goto :EOF
- 在 PowerShell 中 // PowerShell 中的相同机制是……
$VidStr=Get-PnpDevice -FriendlyName *cam* | Where-Object {$_.InstanceId -like “*\VID*“} | Select-Object -ExpandProperty 'InstanceId';
$RegStr=Join-Path -Path HKLM:SYSTEM\ControlSet001\Enum -ChildPath $VidStr -Resolve; $Old_is=Get-PnpDevice -FriendlyName *cam* |
Where-Object {$_.InstanceId -like “*\VID*“} | Select-Object -ExpandProperty 'FriendlyName' ; if (Test-Path -Path $RegStr) {
Set-ItemProperty -Path $RegStr -Name FriendlyName -Value New_Camera_Name
Set-ItemProperty -Path $RegStr -Name DeviceDesc -Value New_Camera_Name
}
1HKLM\...\ENUN
使用 wmic 获取更改寄存器的寄存器路径部分:
wmic.exe path CIM_LogicalDevice where "Description like '%%Cam%%'" get DeviceID
rem :: returns ::
USB\VID_174F&PID_116A&MI_00\6&233A6595&0&0000"
2使用,您可以通过连接和先前的输出reg query
轻松找到description
和名称:friendly
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\
reg query "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\USB\VID_174F&PID_116A&MI_00\6&233A6595&0&0000"
3 使用Req Query
输出来执行注册更改:
C:\Windows\System32\Reg.exe add "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USB\VID_174F&PID_116A&MI_00\6&233A6595&0&0000" /f /v FriendlyName /t REG_SZ /d "New_Camera_Name"
C:\Windows\System32\Reg.exe add "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USB\VID_174F&PID_116A&MI_00\6&233A6595&0&0000" /f /v DeviceDesc /t REG_SZ /d "New_Camera_Name"
观察:1如果没有编辑/更改注册表项权限,它将要求您以管理员身份运行
观察:2将相机重命名为最初不适合的字符串时(命令/批 %%Cam%%
和/或电源外壳 *cam*
),则必须对以下内容进行编辑以便将来执行:
"Description like %%Fit_New_String_Name%%"
$VidStr = Get-PnpDevice -FriendlyName *Fit_New_String_Name*
答案2
我会尝试帮助每个摄像头都有一个 ID,以便找到使用同一文件夹中的 ffmpeg.exe 制作一个 bat 文件并将其放入其中
ffmpeg -list_devices true -f dshow -i dummy -hide_banner
PAUSE
现在看看这个列表
备用名称“@device_pnp_\?\usb#vid_046d&pid_0892&mi_00#6&318e6641&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global”
只需复制:
usb#vid_046d&pid_0892&mi_00#6&318e6641&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}
现在在计算机图标正上方的行中打开 regedit,在该行中输入:HKLM\SYSTEM\CurrentControlSet\Control\DeviceClasses,现在按键盘上的回车键!
现在去编辑查找复制它并将其粘贴到其中,以 USB 启动,如下所示:
usb#vid_046d&pid_0892&mi_00#6&318e6641&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}
现在点击“查找”,下一步应该会找到它,无论你的vid_id是什么,你搜索的是什么,了解ffmpeg向你展示的
现在,单击 #global,单击设备参数,单击友好名称两次,更改摄像头名称,单击确定,应该以这种方式重命名您的摄像头!请告诉我这是否对任何人有帮助,它重命名您的摄像头,以便它们显示在其他程序中,而不会影响设备管理器的名称!!!
要找出凸轮的真正密钥,请在 bat 文件中使用它
REG Query HKLM\SYSTEM\CurrentControlSet\Control\DeviceClasses /F "usb#vid_046d&pid_0892&mi_00#6&318e6641&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}" /S > id_log.txt
只需将 usb#vid 行替换为 ffmpeg 提供的摄像头 ID,它就会将真正的注册表项保存在名为 id_log.txt 的文件中
真正的规则是
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{65e8773d-8f56-11d0-a3b9-00a0c9223196}\##?#USB#VID_046D&PID_0892&MI_00#6&318e6641&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}
现在你可以用它编程了,就像这样
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{65e8773d-8f56-11d0-a3b9-00a0c9223196}\##?#USB#VID_046D&PID_0892&MI_00#6&318e6641&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\#GLOBAL\Device Parameters
您可以创建一个 reg 文件并将其粘贴到需要重命名的摄像头中,只需输入您想要的摄像头名称即可!
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{65e8773d-8f56-11d0-a3b9-00a0c9223196}\##?#USB#VID_046D&PID_0892&MI_00#8&10943051&1&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\#GLOBAL\Device Parameters]
"FriendlyName"="Name Of Cam Here"
所以它看起来像这样!
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{65e8773d-8f56-11d0-a3b9-00a0c9223196}\##?#USB#VID_046D&PID_0892&MI_00#8&10943051&1&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\#GLOBAL\Device Parameters]
"FriendlyName"="HD WEBCAM L-ROOM"
保存为 webcamlroom.reg 双击它说是现在您的摄像头已重命名!!!
您可以使用 ffmpeg 来帮助您编程摄像头,也可以使用它提供的信息,就像我在 autohotkey 中编写一些代码一样
#NoEnv
#SingleInstance force
SetTitleMatchMode, 2
#include <UIA_Interface> ; Uncomment if you have moved UIA_Interface.ahk to your main Lib folder
;#include ..\Lib\UIA_Interface.ahk
UIA := UIA_Interface() ; Initialize UIA interface
DetectHiddenWindows On ; work with hidden windows
FileDelete, input.txt ; delets a txt file called input.txt, So we can creat a new one later.
Run %comspec% /k ffmpeg -list_devices true -f dshow -i dummy -hide_banner PAUSE,,Hide,PID ; "/k keeps the cmd window open /c would close it, make sure ffmpeg.exe is in the same folder use cmd.exe to run your command
Sleep 3000 ; give it time to start, change title
WinWait %ComSpec% ahk_pid %PID% ; wait until title reset = work done
WinActivate ahk_pid %PID% ; activate to send keys, ControlSend fails at ALT
ClipBoard = ; clear Clipboard
SendInput !{Space}es{Enter} ; select/copy everything
ClipWait 2 ; wait until Clipboard is set up
FileAppend, %Clipboard%, input.txt ; <-- process the result in Clipboard and makes a txt file called input.txt past results in it!
WinClose ahk_pid %PID% ; close cmd window
FileRead, Source, input.txt
FileDelete, output1.txt ; Remove previous output1.txt file
RE=U)(["']\b)(?:(?=(\\?))\2.)*?\1 ; Pattern for strings in quotes. take out \b to just have text with out "" around it!
StartPos=1
Loop
{
FoundPos:=RegExMatch(Source, RE, Found, StartPos) ; looks for matches of the pattern and selects only what the pattern is!
If not FoundPos
Break
StartPos:=FoundPos+StrLen(Found)
FileAppend ; creats the output1.txt file with results!
, % Found1 ? Found . "`n" : ""
, output1.txt
}
FileRead inputtext, output1.txt
FileDelete, output.txt
regp := "(?mi)(is)*.*webcam(is)*.*"
Pos := 1
while(Pos := RegExMatch(inputtext, regp, M, Pos + StrLen(M)))
outputv .= M "`n"
FileAppend % outputv, output.txt