파워셸에서 오디오 레벨을 변경하시겠습니까?
파워셸을 사용하여 스피커 볼륨을 설정하려면 어떻게 해야 합니까?나는 온라인에서 여기와 다른 곳을 뒤졌지만 정말로 답을 찾을 수 없습니다.
Win32 API를 랩핑한 다음 내 파워셸 스크립트에서 호출하는 무언가를 C#에 써야 할 것 같습니다.Win32 API는 다음 중 하나일 것입니다.
[DllImport("winmm.dll")]
public static extern int waveOutGetVolume(IntPtr hwo, out uint dwVolume);
[DllImport("winmm.dll")]
public static extern int waveOutSetVolume(IntPtr hwo, uint dwVolume);
Windows 10에서 SendKeys가 작동을 멈췄습니다(문자 그대로 내 캐럿이 있는 곳에 숫자를 입력합니다).저는 이 블로그 게시물을 매우 편리한 방법으로 찾았습니다.
먼저 오디오 API에 액세스하려면 다음을 실행합니다.
Add-Type -TypeDefinition @'
using System.Runtime.InteropServices;
[Guid("5CDF2C82-841E-4546-9722-0CF74078229A"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IAudioEndpointVolume
{
// f(), g(), ... are unused COM method slots. Define these if you care
int f(); int g(); int h(); int i();
int SetMasterVolumeLevelScalar(float fLevel, System.Guid pguidEventContext);
int j();
int GetMasterVolumeLevelScalar(out float pfLevel);
int k(); int l(); int m(); int n();
int SetMute([MarshalAs(UnmanagedType.Bool)] bool bMute, System.Guid pguidEventContext);
int GetMute(out bool pbMute);
}
[Guid("D666063F-1587-4E43-81F1-B948E807363F"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IMMDevice
{
int Activate(ref System.Guid id, int clsCtx, int activationParams, out IAudioEndpointVolume aev);
}
[Guid("A95664D2-9614-4F35-A746-DE8DB63617E6"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IMMDeviceEnumerator
{
int f(); // Unused
int GetDefaultAudioEndpoint(int dataFlow, int role, out IMMDevice endpoint);
}
[ComImport, Guid("BCDE0395-E52F-467C-8E3D-C4579291692E")] class MMDeviceEnumeratorComObject { }
public class Audio
{
static IAudioEndpointVolume Vol()
{
var enumerator = new MMDeviceEnumeratorComObject() as IMMDeviceEnumerator;
IMMDevice dev = null;
Marshal.ThrowExceptionForHR(enumerator.GetDefaultAudioEndpoint(/*eRender*/ 0, /*eMultimedia*/ 1, out dev));
IAudioEndpointVolume epv = null;
var epvid = typeof(IAudioEndpointVolume).GUID;
Marshal.ThrowExceptionForHR(dev.Activate(ref epvid, /*CLSCTX_ALL*/ 23, 0, out epv));
return epv;
}
public static float Volume
{
get { float v = -1; Marshal.ThrowExceptionForHR(Vol().GetMasterVolumeLevelScalar(out v)); return v; }
set { Marshal.ThrowExceptionForHR(Vol().SetMasterVolumeLevelScalar(value, System.Guid.Empty)); }
}
public static bool Mute
{
get { bool mute; Marshal.ThrowExceptionForHR(Vol().GetMute(out mute)); return mute; }
set { Marshal.ThrowExceptionForHR(Vol().SetMute(value, System.Guid.Empty)); }
}
}
'@
그런 다음 이렇게 볼륨을 조절합니다.
[audio]::Volume = 0.2 # 0.2 = 20%, etc.
그리고 이렇게 음소거/음소거를 하지 않습니다.
[audio]::Mute = $true # Set to $false to un-mute
이러한 명령을 사용하여 음소거, 볼륨 하향, 볼륨 상향 스피커 레벨을 설정할 수 있습니다.단순한1..50
루프(각 카운터 = 2% 볼륨)를 추가하여 C#의 필요 없이 입력을 받아 볼륨을 조정하는 기능을 만들 수 있습니다.
볼륨 음소거
$obj = new-object -com wscript.shell
$obj.SendKeys([char]173)
볼륨 하향 버튼
$obj = new-object -com wscript.shell
$obj.SendKeys([char]174)
볼륨 업 버튼
$obj = new-object -com wscript.shell
$obj.SendKeys([char]175)
여기서 관련 정보를 찾으십시오.
PowerShell에서 소리를 음소거/ 음소거하려면 어떻게 해야 합니까?
편집: 여기 재사용 가능한 기능이 있습니다. 파워셸 v2에서 W7x64 w를 테스트하고 작동합니다.
Function Set-Speaker($Volume){$wshShell = new-object -com wscript.shell;1..50 | % {$wshShell.SendKeys([char]174)};1..$Volume | % {$wshShell.SendKeys([char]175)}}
#
사용 예시.각 눈금은 2%임을 기억하십시오.
#Sets volume to 60%
Set-Speaker -Volume 30
#Sets volume to 80%
Set-Speaker -Volume 40
#Sets volume to 100%
Set-Speaker -Volume 50
그리고 이 기능은 Toggle-Mute를 합니다.
Function Toggle-Mute(){$wshShell = new-object -com wscript.shell;$wshShell.SendKeys([char]173)}
#
오디오 기기를 조작하기 위한 cmdlet을 만들었습니다.
http://www.automatedops.com/projects/windowsaudiodevice-powershell-cmdlet/
라이브 피크 값 디스플레이도 포함되어 있습니다.
@Knuckle-Dragger의 솔루션이 마음에 들었지만 몇 가지 사항을 변경했습니다.제 솔루션은 파워셸 스크립트(.ps1 파일)와 batch/.cmd 파일로 구성되어 있습니다.이 작업은 바로 가기를 만들고 시작 폴더에 배치할 수 있도록 좀 더 쉽게 사용할 수 있도록 하기 위해 수행됩니다.
아마도 .ps1 파일을 직접 실행할 수 있는 바로 가기를 만드는 방법이 있을 것입니다(그리고 아마도 있다는 것을 인정합니다) 그러면 .cmd 파일이 생략될 수 있습니다.다음에 작업할 수도 있습니다.
스크립트 코드도 몇 가지 개선했습니다.제 조정을 통해 번호를 제공할 수 있으며, 볼륨은 해당 번호로 설정됩니다(해당 번호의 2배가 아님).사용하는 키 누름은 2%씩 증가하기 때문에 홀수로 설정할 수는 없지만 요청된 볼륨 수준에 최대한 가까워집니다.
set vol.ps1 파일 내용입니다.
<# begin function #>
Function Set-Speaker($Volume){$wshShell = new-object -com wscript.shell;1..50 | % {$wshShell.SendKeys([char]174)};1..$Volume | % {$wshShell.SendKeys([char]175)}}
<# end function #>
write-host "Requested volume:" $args[0]
<# set the volume here #>
$vol=$args[0] / 2
Set-Speaker -volume $vol
<# show the operator how the volume ws actually set... it may be off by 1 from their request #>
$vol=$vol * 2
write-host "Volume adjusted to" $vol
할 수 를 들어 에서 을 과 할 하면 할 .powershell <path>\setvol.ps1 50
볼륨을 50%로 설정하려면 다음 한 줄로 .cmd 파일을 만들기로 했습니다.
powershell <path>\setvol.ps1 %1
이를 통해 .cmd 파일에 대한 Windows 바로 가기를 구성하고 원하는 볼륨 수준에 대한 매개 변수를 제공할 수 있습니다.그러면 로그인할 때 실행되도록 바로 가기를 시작 폴더에 넣을 수 있습니다.
TechNet에서 이 PC 볼륨 컨트롤 스크립트를 확인합니다.이것은 최소한 윈도우 XP에서는 당신이 요구하는 것을 할 수 있다고 주장합니다.여기에 NirCmd라는 도구를 사용하는 또 다른 접근법이 있습니다.
언급URL : https://stackoverflow.com/questions/21355891/change-audio-level-from-powershell
'programing' 카테고리의 다른 글
$http 호출의 전체 호출 스택 추적 가져오기 (0) | 2023.09.17 |
---|---|
CSS @media 규칙을 인라인으로 넣을 수 있습니까? (0) | 2023.09.17 |
MySQL - 저장 프로시저에서 예외를 두는 방법? (0) | 2023.09.17 |
제품을 선택하고 카테고리를 계층적으로 결합 (0) | 2023.09.17 |
JQuery는 내부 텍스트를 변경하지만 html은 유지합니다. (0) | 2023.09.17 |