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


답변:


11

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

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


나를 위해 작동하지 않습니다. Last.fm 클라이언트는 항상 최대 값의 ~ 15 %로 다시 전환됩니다.
Robert

4

나는이 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);

슬라이더 컨트롤 이동에 대한 정보를 제공하는 이 자동 스레드 덕분 입니다.



3

다음 .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

2

위의 스티븐 공유 대답의 파워 쉘 재 작성의 비트, 나는 여기에 멋진 자기 상승 코드에서 비트를 빌려 : 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

1

한동안 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로갑니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.