用C# 控制Windows系統(tǒng)音量的實(shí)現(xiàn)方法
C#開發(fā)Windows應(yīng)用程序中經(jīng)常需要去控制系統(tǒng)的音量,分兩種方式:
1.使用Win Api控制
2.使用C++ dll控制
Win Api控制:
使用user32.dll和winmm.dll都可以控制系統(tǒng)音量,區(qū)別是Win系統(tǒng)的版本。winmm.dll Xp環(huán)境下可用,user32.dll Vista及以上版本。
C++ dll控制:
CoreAudioApi 是C++ 第三方封裝了音量控制,網(wǎng)上下載DLL后再項(xiàng)目中引用即可使用。CoreAudioApi Vista及以上版本支持。
下面給出代碼
1.winmm控制方式,涉及Xp系統(tǒng)波形聲音的左右聲道,高位為左聲道,低位為右聲道:
winmm
[DllImport("winmm.dll", EntryPoint = "waveOutSetVolume")]
public static extern int WaveOutSetVolume(IntPtr hwo, uint dwVolume);
private void SetVol(double arg){
double newVolume = ushort.MaxValue * arg / 10.0;
uint v = ((uint)newVolume) & 0xffff;
uint vAll = v | (v << 16);
int retVal = WaveOutSetVolume(IntPtr.Zero, vAll);
}
2.user32控制方式:
user32
[DllImport("user32.dll")]
public static extern IntPtr SendMessageW(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
public void SetVol(){
p = Process.GetCurrentProcess();
for (int i = 0; i < 5; i++) {
SendMessageW(p.Handle, WM_APPCOMMAND, p.Handle, (IntPtr)APPCOMMAND_VOLUME_UP);
}
}
private Process p;
private const int APPCOMMAND_VOLUME_MUTE = 0x80000;
private const int APPCOMMAND_VOLUME_UP = 0x0a0000;
private const int APPCOMMAND_VOLUME_DOWN = 0x090000;
private const int WM_APPCOMMAND = 0x319;
3.CoreAudioApi
CoreAudioApi
Using CoreAudioApi;
public void SetVol(double arg) {
device = DevEnum.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia);
device.AudioEndpointVolume.MasterVolumeLevelScalar = (float)arg;
}
private MMDevice device;
private MMDeviceEnumerator DevEnum = new MMDeviceEnumerator();
相關(guān)文章
C語言中結(jié)構(gòu)體與內(nèi)存對齊實(shí)例解析
C語言結(jié)構(gòu)體對齊也是老生常談的話題了,基本上是面試題的必考題,這篇文章主要給大家介紹了關(guān)于C語言中結(jié)構(gòu)體與內(nèi)存對齊的相關(guān)資料,需要的朋友可以參考下2021-07-07
C++ OpenCV實(shí)現(xiàn)圖像雙三次插值算法詳解
圖像雙三次插值的原理,就是目標(biāo)圖像的每一個像素都是由原圖上相對應(yīng)點(diǎn)周圍的4x4=16個像素經(jīng)過加權(quán)之后再相加得到的。本文主要介紹了通過C++ OpenCV實(shí)現(xiàn)圖像雙三次插值算法,需要的可以參考一下2021-12-12

