【Roger Wo】在.NET程式中控制系統音量

iDotNetSpace發表於2008-06-16

在windows下控制系統音量,需要通過使用win32的WDM audio components(winmm.dll)來實現,為了方便起見,將其封裝到了一個AudioMixerHelper類中,可以直接通過GetVolume()和SetVolume方法來改變音量。

【Roger Wo】在.NET程式中控制系統音量using System;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量
using System.Runtime.InteropServices;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量 
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量
namespace Microsoft
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量
{
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量 
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量     
public class AudioMixerHelper
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量     
{
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
public const int MMSYSERR_NOERROR = 0;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
public const int MAXPNAMELEN = 32;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
public const int MIXER_LONG_NAME_CHARS = 64;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
public const int MIXER_SHORT_NAME_CHARS = 16;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
public const int MIXER_GETLINEINFOF_COMPONENTTYPE  = 0x3;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
public const int MIXER_GETCONTROLDETAILSF_VALUE = 0x0;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
public const int MIXER_GETLINECONTROLSF_ONEBYTYPE  = 0x2;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
public const int MIXER_SETCONTROLDETAILSF_VALUE = 0x0;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
public const int MIXERLINE_COMPONENTTYPE_DST_FIRST = 0x0;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
public const int MIXERLINE_COMPONENTTYPE_SRC_FIRST = 0x1000;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
public const int MIXERLINE_COMPONENTTYPE_DST_SPEAKERS =
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              (MIXERLINE_COMPONENTTYPE_DST_FIRST 
+ 4);
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
public const int MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE =
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              (MIXERLINE_COMPONENTTYPE_SRC_FIRST 
+ 3);
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
public const int MIXERLINE_COMPONENTTYPE_SRC_LINE =
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              (MIXERLINE_COMPONENTTYPE_SRC_FIRST 
+ 2);
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
public const int MIXERCONTROL_CT_CLASS_FADER = 0x50000000;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
public const int MIXERCONTROL_CT_UNITS_UNSIGNED = 0x30000;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
public const int MIXERCONTROL_CONTROLTYPE_FADER =
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              (MIXERCONTROL_CT_CLASS_FADER 
| MIXERCONTROL_CT_UNITS_UNSIGNED);
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
public const int MIXERCONTROL_CONTROLTYPE_VOLUME =
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              (MIXERCONTROL_CONTROLTYPE_FADER 
+ 1);
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量 
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         [DllImport(
"winmm.dll", CharSet=CharSet.Ansi)]
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
private static extern int mixerClose (int hmx);
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         [DllImport(
"winmm.dll", CharSet=CharSet.Ansi)]
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
private static extern int mixerGetControlDetailsA (int hmxobj,ref
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              MIXERCONTROLDETAILS pmxcd , 
int fdwDetails);
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         [DllImport(
"winmm.dll", CharSet=CharSet.Ansi)]
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
private static extern int mixerGetDevCapsA(int uMxId, MIXERCAPS
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              pmxcaps, 
int cbmxcaps);
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         [DllImport(
"winmm.dll", CharSet=CharSet.Ansi)]
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
private static extern int mixerGetID (int hmxobj, int pumxID, int
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              fdwId);
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         [DllImport(
"winmm.dll", CharSet=CharSet.Ansi)]
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
private static extern int  mixerGetLineControlsA (int hmxobj,ref
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              MIXERLINECONTROLS pmxlc, 
int fdwControls);
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         [DllImport(
"winmm.dll", CharSet=CharSet.Ansi)]
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
private static extern int  mixerGetLineInfoA (int hmxobj,ref
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              MIXERLINE pmxl , 
int fdwInfo);
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         [DllImport(
"winmm.dll", CharSet=CharSet.Ansi)]
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
private static extern int  mixerGetNumDevs();
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         [DllImport(
"winmm.dll", CharSet=CharSet.Ansi)]
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
private static extern int  mixerMessage(int hmx , int uMsg , int
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              dwParam1 , 
int dwParam2);
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         [DllImport(
"winmm.dll", CharSet=CharSet.Ansi)]
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
private static extern int  mixerOpen  (out int phmx , int uMxId ,
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
int dwCallback , int dwInstance , int fdwOpen);
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         [DllImport(
"winmm.dll", CharSet=CharSet.Ansi)]
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
private static extern int  mixerSetControlDetails(int hmxobj ,ref
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              MIXERCONTROLDETAILS pmxcd  , 
int fdwDetails);
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量 
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
public struct MIXERCAPS
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
{
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int wMid;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int wPid;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int vDriverVersion;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              [MarshalAs(UnmanagedType.ByValTStr, SizeConst
=MAXPNAMELEN)]
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public string szPname;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int fdwSupport;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int cDestinations;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         }

【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量 
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
public struct MIXERCONTROL
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
{
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int cbStruct;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int dwControlID;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int dwControlType;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int fdwControl;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int cMultipleItems;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              [MarshalAs( UnmanagedType.ByValTStr,
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量                    SizeConst
=MIXER_SHORT_NAME_CHARS)]
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public string szShortName ;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              [MarshalAs( UnmanagedType.ByValTStr,
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量                    SizeConst
=MIXER_LONG_NAME_CHARS)]
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public string szName;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int lMinimum;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int lMaximum;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              [MarshalAs(UnmanagedType.U4, SizeConst
=10)]
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int reserved;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         }

【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量 
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
public struct MIXERCONTROLDETAILS
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
{
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int cbStruct;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int dwControlID;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int cChannels;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int item;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int cbDetails;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public IntPtr paDetails;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         }

【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量 
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
public struct MIXERCONTROLDETAILS_UNSIGNED
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
{
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int dwValue;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         }

【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量 
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
public struct MIXERLINE
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量         
{
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int cbStruct;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int dwDestination;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int dwSource;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int dwLineID;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int fdwLine;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int dwUser;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int dwComponentType;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int cChannels;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int cConnections;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              
public int cControls;
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量              [MarshalAs(UnmanagedType.ByValTStr,
【Roger Wo】在.NET程式中控制系統音量
【Roger Wo】在.NET程式中控制系統音量   &nbs

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-349324/,如需轉載,請註明出處,否則將追究法律責任。

【Roger Wo】在.NET程式中控制系統音量
請登入後發表評論 登入
全部評論

相關文章