내 응용 프로그램의 응용 프로그램 볼륨 설정을 변경했습니다. 모든 앱이 전체 볼륨 설정을 사용하도록 모든 개별 볼륨 설정을 재설정하고 싶습니다. 어떻게해야합니까?
답변
작동하는 해결 방법을 찾았지만 약간 해킹입니다. 더 나은 솔루션을 선호하지만 그 동안 시도해보십시오.
글로벌 볼륨을 최대로 설정하고 각 개별 애플리케이션 볼륨도 최대로 이동하십시오. 그런 다음 글로벌 볼륨을 낮추십시오. 작동하는 것 같습니다. 모든 응용 프로그램 볼륨 설정이 이제 전역 설정에 바인딩됩니다.
답변
나는이 all-max-> reset을 항상해야합니다. 나는 마지막으로 그물을 검색하여 내가 놓친 비밀 단축키 또는 콤보가 있는지 확인했습니다. 분명히 아닙니다. : /
그래서 나는 인간적으로 가능한 것보다 더 빨리 이것을 수행하기 위해 autoit 스크립트를 만들었습니다 🙂 도구-> 빌드를 통해 그것을 컴파일하고 시작 메뉴에서 검색하여 exe를 실행할 수 있습니다.
모든 슬라이더가 음소거 해제되고 50 %로 이동합니다.
Volume_Normalize.au3 :
#include <GuiConstantsEx.au3>
#include <GuiSlider.au3>
Func SlideTo($Win, $Ctrl, $Pct)
If Not IsInt($Pct) Or $Pct < 3 Or $Pct > 100 Then
SetError(1)
Return False
EndIf
$CtrlHandle = ControlGetHandle($Win, '', $Ctrl)
if not $CtrlHandle Then
SetError(2)
Return False
EndIf
Local $SetValue, $SendValue
If $Pct <= 51 Then
$SetValue = $Pct + 1
$SendValue = '{UP}'
Else
$SetValue = $Pct - 1
$SendValue = '{DOWN}'
EndIf
_GUICtrlSlider_SetPos($CtrlHandle, $SetValue)
Local $PrevOpt = Opt('SendKeyDelay', 1)
ControlSend($Win, '', $Ctrl, $SendValue)
Opt('SendKeyDelay', $PrevOpt)
Return True
EndFunc
Func EachSliderTo($Win, $Pct)
WinWait($Win, "")
If Not WinActive($Win,"") Then WinActivate($Win,"")
local $i = 1
If not WinActive($Win,"") Then WinActivate($Win,"")
While True
$Ctrl = "[CLASS:msctls_trackbar32; INSTANCE:"& $i &"]"
if not SlideTo($Win, $Ctrl, $Pct) Then
ExitLoop
EndIf
$i = $i + 1
WEnd
Return True
EndFunc
$Win = "Volume Mixer"
$Prog = "SndVol.exe"
if Not WinActive($Win,"") Then
if not WinActivate($Win,"") Then
ShellExecute($Prog)
If not WinActive($Win,"") Then WinActivate($Win,"")
EndIf
EndIf
WinWait($Win)
EachSliderTo("Volume Mixer",100);
EachSliderTo("Volume Mixer", 50);
슬라이더 컨트롤 이동에 대한 정보를 제공하는 이 자동 스레드 덕분 입니다.
답변
다음 .bat
에서 파일 Per4u3e 온 마이크로 소프트 포럼은 나를 위해 트릭을했다. 오디오 서비스를 일시적으로 중지하고 레지스트리를 수정하여 Windows를 기본 오디오 설정으로 재설정합니다.
Windows 10 이상에서는 스크립트를 관리자 권한으로 실행해야 할 수도 있습니다.
@ECHO OFF
ECHO Reset Volume Mixer Settings...
NET STOP Audiosrv
NET STOP AudioEndpointBuilder
REG DELETE "HKCU\Software\Microsoft\Internet Explorer\LowRegistry\Audio\PolicyConfig\PropertyStore" /F
REG ADD "HKCU\Software\Microsoft\Internet Explorer\LowRegistry\Audio\PolicyConfig\PropertyStore"
NET START Audiosrv
답변
위의 스티븐 공유 대답의 파워 쉘 재 작성의 비트, 나는 여기에 멋진 자기 상승 코드에서 비트를 빌려 :
https://blogs.msdn.microsoft.com/virtual_pc_guy/2010/09/23/a-self-elevating 파워 쉘 스크립트
왜? 배치 스크립트보다 훨씬 빠르게 실행 되며이 많이 사용합니다. 내가 공유 할 것이라고 생각했다. 🙂
If(!(new-object System.Security.Principal.WindowsPrincipal([System.Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)) {
$newProcess = new-object System.Diagnostics.ProcessStartInfo "PowerShell"
$newProcess.Arguments = $myInvocation.MyCommand.Definition
$newProcess.Verb = "runas"
$null = [System.Diagnostics.Process]::Start($newProcess)
Return
}
cls
$ErrorActionPreference = "SilentlyContinue"
Write-Host '--- Reset Windows Audio Mixer ---' -ForegroundColor Cyan;""
Write-Host 'Stopping Service [Audiosrv] : ' -ForegroundColor White -NoNewline
$Error.Clear()
Stop-Service -Name Audiosrv -Force
If($Error) {Write-Host 'Error' -ForegroundColor Red} Else {Write-Host 'OK' -ForegroundColor Green}
Write-Host 'Stopping Service [AudioEndpointBuilder] : ' -ForegroundColor White -NoNewline
$Error.Clear()
Stop-Service -Name AudioEndpointBuilder -Force
If($Error) {Write-Host 'Error' -ForegroundColor Red} Else {Write-Host 'OK' -ForegroundColor Green}
Write-Host 'Deleting Registry Key [PropertyStore] : ' -ForegroundColor White -NoNewline
$Error.Clear()
Remove-Item -Path 'HKCU:Software\Microsoft\Internet Explorer\LowRegistry\Audio\PolicyConfig\PropertyStore' -Force -Recurse
If($Error) {Write-Host 'Error' -ForegroundColor Red} Else {Write-Host 'OK' -ForegroundColor Green}
Write-Host 'Creating Registry Key [PropertyStore] : ' -ForegroundColor White -NoNewline
$Error.Clear()
$null = New-Item -Path 'HKCU:Software\Microsoft\Internet Explorer\LowRegistry\Audio\PolicyConfig\' -Name PropertyStore
If($Error) {Write-Host 'Error' -ForegroundColor Red} Else {Write-Host 'OK' -ForegroundColor Green}
Write-Host 'Starting Service [Audiosrv] : ' -ForegroundColor White -NoNewline
$Error.Clear()
Start-Service -Name Audiosrv
If($Error) {Write-Host 'Error' -ForegroundColor Red} Else {Write-Host 'OK' -ForegroundColor Green}
Sleep -Seconds 5
또는 조잡한 피드백 텍스트 나 자기 상승없이 선호하는 경우 :
Stop-Service -Name Audiosrv -Force
Stop-Service -Name AudioEndpointBuilder -Force
Remove-Item -Path 'HKCU:Software\Microsoft\Internet Explorer\LowRegistry\Audio\PolicyConfig\PropertyStore' -Force -Recurse
$null = New-Item -Path 'HKCU:Software\Microsoft\Internet Explorer\LowRegistry\Audio\PolicyConfig\' -Name PropertyStore
Start-Service -Name Audiosrv
Pause
답변
한동안 ferrix의 스크립트를 사용해 왔지만 모든 응용 프로그램 볼륨 슬라이더를 모두 50 %로 설정하지 않고 현재 마스터 볼륨과 일치하도록 설정했습니다. 또한 볼륨이 3 % 미만으로 설정된 슬라이더에서 작동하도록 변경했습니다.
Volume_Normalize_Alt.au3 :
#include <GuiConstantsEx.au3>
#include <GuiSlider.au3>
Func SlideTo($Win, $Ctrl, $Pct)
If Not IsInt($Pct) Or $Pct < 0 Or $Pct > 100 Then
SetError(1)
Return False
EndIf
$CtrlHandle = ControlGetHandle($Win, '', $Ctrl)
If Not $CtrlHandle Then
SetError(2)
Return False
EndIf
Local $SetValue, $SendValue
If $Pct <= 51 Then
$SetValue = $Pct + 1
$SendValue = '{UP}'
Else
$SetValue = $Pct - 1
$SendValue = '{DOWN}'
EndIf
_GUICtrlSlider_SetPos($CtrlHandle, $SetValue)
Local $PrevOpt = Opt('SendKeyDelay', 1)
ControlSend($Win, '', $Ctrl, $SendValue)
Opt('SendKeyDelay', $PrevOpt)
Return True
EndFunc ;==>SlideTo
Func EachSliderTo($Win, $Pct)
WinWait($Win, "")
If Not WinActive($Win, "") Then WinActivate($Win, "")
Local $i = 1
If Not WinActive($Win, "") Then WinActivate($Win, "")
While True
$Ctrl = "[CLASS:msctls_trackbar32; INSTANCE:" & $i & "]"
If Not SlideTo($Win, $Ctrl, $Pct) Then
ExitLoop
EndIf
$i = $i + 1
WEnd
Return True
EndFunc ;==>EachSliderTo
$Win = "Volume Mixer"
$Prog = "SndVol.exe"
If Not WinActive($Win, "") Then
If Not WinActivate($Win, "") Then
ShellExecute($Prog)
If Not WinActive($Win, "") Then WinActivate($Win, "")
EndIf
EndIf
WinWait($Win)
;Master volume has the highest instance number so find slider with highest instance then return its handle.
Local $i = 1
While True
Local $h = ControlGetHandle($Win, '', "[CLASS:msctls_trackbar32; INSTANCE:" & $i & "]")
If @error > 0 Then
ExitLoop
EndIf
$i = $i + 1
Local $Handle = $h ;store last sucessful handle to be returned
WEnd
Local $CurrMasterVol = _GUICtrlSlider_GetPos($Handle)
;100 is 0% and 0 is 100%
;EachSliderTo("Volume Mixer", 100) ;What is the point of doing this first?
EachSliderTo("Volume Mixer", $CurrMasterVol)
WinClose("Volume Mixer")
크레디트는 원본 스크립트를 작성하여 ferrix로갑니다.