midiOutGetDevCaps (winmm)
Last changed: -185.192.69.14

.
Summary
The midiOutGetDevCaps function queries a specified MIDI output device to determine its capabilities.

C# Signature:

[DllImport("winmm.dll", SetLastError = true)]
public static extern MMRESULT midiOutGetDevCaps(UIntPtr uDeviceID, ref MIDIOUTCAPS lpMidiOutCaps, uint cbMidiOutCaps);

User-Defined Types:

MIDIOUTCAPS

MMRESULT

Alternative Managed API:

Do you know one? Please contribute it!

Notes:

None.

Tips & Tricks:

Use (uint)Marshal.SizeOf(typeof(MIDIOUTCAPS)) for cbMidiOutCaps.

Sample Code:

    [DllImport("winmm.dll", SetLastError = true)]
    static extern uint midiOutGetNumDevs();

    [DllImport("Winmm.dll")]
    static extern uint midiInGetNumDevs();

    [StructLayout(LayoutKind.Sequential)]
    struct MIDIOUTCAPS
    {
        public ushort wMid;
        public ushort wPid;
        public uint vDriverVersion;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
        public string szPname;
        public ushort wTechnology;
        public ushort wVoices;
        public ushort wNotes;
        public ushort wChannelMask;
        public uint dwSupport;
    }

    private void GetOutputDevices()
    {
        uint outDevs = midiOutGetNumDevs();

        for (int x = 0; x < outDevs; x++)
        {
        MIDIOUTCAPS caps = new MIDIOUTCAPS();
        midiOutGetDevCaps((UIntPtr) x, ref caps, (uint)Marshal.SizeOf(typeof(MIDIOUTCAPS)));

           //Do whatever you want with the caps object here
        MessageBox.Show(caps.szPname);
        }
    }

Documentation