Windows 7 및 Vista에서 응용 프로그램 볼륨 별 설정을 재설정하는 방법 전체 볼륨 설정을

내 응용 프로그램의 응용 프로그램 볼륨 설정을 변경했습니다. 모든 앱이 전체 볼륨 설정을 사용하도록 모든 개별 볼륨 설정을 재설정하고 싶습니다. 어떻게해야합니까?



답변

작동하는 해결 방법을 찾았지만 약간 해킹입니다. 더 나은 솔루션을 선호하지만 그 동안 시도해보십시오.

글로벌 볼륨을 최대로 설정하고 각 개별 애플리케이션 볼륨도 최대로 이동하십시오. 그런 다음 글로벌 볼륨을 낮추십시오. 작동하는 것 같습니다. 모든 응용 프로그램 볼륨 설정이 이제 전역 설정에 바인딩됩니다.


답변

나는이 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로갑니다.


답변