以编程方式从 Windows 注册表更改网络摄像头的名称

以编程方式从 Windows 注册表更改网络摄像头的名称

我想更改 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和名称:friendlyHKEY_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

相关内容