c#システムが静音などのオーディオ操作をしているかどうかを判断する
自分で書いたウィジェットは、勤務時間に本をミュート、IPを切り替える操作が必要なので、win APIでミュートを切り替えるのは同じ関数を呼び出すので、システムがミュートの状態にあるかどうかは判断できません.また、古いAPIコードはVista/win 7によくサポートされていません.ここでは2つのソリューション(システムが静音しているかどうかを判断するには中国語の資料が不足しているので、この文書を作成して必要な友达の参考にします)を提供しています.1つは古いもので、下に貼ったコードは基本的に見つけることができます.
2つ目もおすすめの方法で、win 7でしかテストされていません.
ここでは、海外の友人がカプセル化したAudioクラス(より多くのオーディオ操作を含む)を引用し、具体的なコードのダウンロードは以下のリンクを参照することができます.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;
//CoreAudioApi Vista/Win7 , API ,
namespace SwitchIP
{
class VolumeControl
{
//
public Form myForm;
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, uint wParam, uint lParam);
const uint WM_APPCOMMAND = 0x319;
const uint APPCOMMAND_VOLUME_UP = 0x0a;
const uint APPCOMMAND_VOLUME_DOWN = 0x09;
const uint APPCOMMAND_VOLUME_MUTE = 0x08;
//
public void VolumeUp(){
SendMessage(myForm.Handle, WM_APPCOMMAND, 0x30292, APPCOMMAND_VOLUME_UP * 0x10000);
}
//
public void VolumeDown() {
SendMessage(myForm.Handle, WM_APPCOMMAND, 0x30292, APPCOMMAND_VOLUME_DOWN * 0x10000);
}
//
public void VolumeMute() {
SendMessage(myForm.Handle, WM_APPCOMMAND, 0x200eb0, APPCOMMAND_VOLUME_MUTE * 0x10000);
}
}
}
2つ目もおすすめの方法で、win 7でしかテストされていません.
ここでは、海外の友人がカプセル化したAudioクラス(より多くのオーディオ操作を含む)を引用し、具体的なコードのダウンロードは以下のリンクを参照することができます.
using CoreAudioApi;
/*[email protected]
CoreAudioApi.dll
*/
......
private MMDevice defaultDevice = null;
......
/*
http://www.codeproject.com/KB/vista/CoreAudio.aspx?msg=2747721
*/
//
private bool isMuted()
{
return defaultDevice.AudioEndpointVolume.Mute;
}
//
private void setMute()
{
defaultDevice.AudioEndpointVolume.Mute = true;
}
//
private void setUnMute()
{
defaultDevice.AudioEndpointVolume.Mute = false;
}
// MMDevice
private void muteInit()
{
MMDeviceEnumerator devEnum = new MMDeviceEnumerator();
defaultDevice =
devEnum.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia);
}