Search code examples
c#volumewmplib

change volume of mp3 playing via wmplib in c#


Is it somehow possible to change the volume of a mp3-file that is playing via wmplib? Changing the volume of the program itself would be ok as well.

Are there any solutions to do this?


Solution

  • The idea is to send WM_APPCOMMAND message (also see this answer).

    For WPF use WindowInteropHelper to get the Handle of the Window:

    class MainWindow : Window
    {
        ...
    
        private const int APPCOMMAND_VOLUME_MUTE = 0x80000;
        private const int WM_APPCOMMAND = 0x319;
        private const int APPCOMMAND_VOLUME_UP = 10 * 65536;
        private const int APPCOMMAND_VOLUME_DOWN = 9 * 65536;
    
        [DllImport("user32.dll")]
        public static extern IntPtr SendMessageW(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
    
        private void VolumeUp()
        {
            // APPCOMMAND_VOLUME_UP or APPCOMMAND_VOLUME_DOWN
            var windowInteropHelper = new WindowInteropHelper(this);
            SendMessageW(windowInteropHelper.Handle, (IntPtr)WM_APPCOMMAND, windowInteropHelper.Handle, (IntPtr)APPCOMMAND_VOLUME_UP);
        }
    }
    

    For Windows Forms use Control.Handle Property:

    class MainForm : Form
    {
        ...
    
        private void VolumeUp()
        {
            SendMessageW(Handle, (IntPtr)WM_APPCOMMAND, Handle, (IntPtr)APPCOMMAND_VOLUME_UP);
        }
    }