public bool GetMixerControls(out MixerInfo data) { MIXERLINE mxl = new MIXERLINE(); MIXERLINECONTROLS mlc = new MIXERLINECONTROLS(); mxl.cbStruct = (uint)Marshal.SizeOf(typeof(MIXERLINE)); mlc.cbStruct = (uint)Marshal.SizeOf(typeof(MIXERLINECONTROLS)); var errCode = WinMNWarpConstants.mixerGetLineInfo(IntPtr.Zero, ref mxl, MIXER.OBJECTF_MIXER | MIXER.GETLINEINFOF_DESTINATION); mlc.dwLineID = mxl.dwLineID; mlc.cControls = mxl.cControls; //mlc.cbmxctrl = (uint)Marshal.SizeOf(typeof(MIXERCONTROL)); //mlc.pamxctrl = Marshal.AllocHGlobal((int)(mlc.cbmxctrl * mlc.cControls)); //WinMNWarpConstants.mixerGetLineControls(IntPtr.Zero, ref mlc, MIXER.OBJECTF_MIXER | MIXER.GETLINECONTROLSF_ALL); //MyMixerInfo rtn = new MyMixerInfo(); data = new MixerInfo(); //for (int i = 0; i < mlc.cControls; i++) //{ // MIXERCONTROL mxc = (MIXERCONTROL)Marshal.PtrToStructure((IntPtr)((int)mlc.pamxctrl + (int)mlc.cbmxctrl * i), typeof(MIXERCONTROL)); // switch (mxc.dwControlType) // { // case MIXERCONTROL_CONTROLTYPE.VOLUME: // data.volumeCtl = mxc.dwControlID; // data.minVolume = mxc.Bounds.lMinimum; // data.maxVolume = mxc.Bounds.lMaximum; // break; // case MIXERCONTROL_CONTROLTYPE.MUTE: // data.muteCtl = mxc.dwControlID; // break; // } //} //Marshal.FreeHGlobal(mlc.pamxctrl); return(true); }
internal static extern uint mixerGetLineControls(IntPtr hmxobj, ref MIXERLINECONTROLS pmxlc, MIXER flags);