无法通过进程ID将Windows媒体播放器静音

时间:2017-02-05 18:25:57

标签: c# visual-studio-2013 windows-10 windows-media-player

我使用以下的答案2代码来静音外部播放器,如vlc或windows media player。

Controlling Application's Volume: By Process-ID

VLC播放器正常静音。但Windows媒体播放器没有。

视觉上它正确变异,如下图所示。但我仍然通过扬声器听到声音。当我删除静音(应用程序的静音)并使用鼠标手动将其静音时,它会被正确静音。

enter image description here

enter image description here

       public static void mute()
        {              

            for(int i = 0;i<playerList.Length;i++)
            {                    
                var hWnd = FindWindow(null, playerList[i]);
                if (hWnd == IntPtr.Zero)
                {
                    Console.WriteLine("Mute " + playerList[i] + " Error_1");
                    continue;
                }


                uint pID;
                GetWindowThreadProcessId(hWnd, out pID);
                if (pID == 0)
                {
                    Console.WriteLine("Mute " + playerList[i] + " Error_2");
                    continue;
                }




                VolumeMixer.SetApplicationMute((int)pID, true);
                Console.WriteLine("Mute " + playerList[i] + " Ok PID: " + pID);


            }


        }

1 个答案:

答案 0 :(得分:0)

@Streamline在评论中说:

  

在GetVolumeObject(int pid)方法中:而不是只返回一个   会话音量控制,可能必须返回包含所有的列表   ISimpleAudioVolume具有WMP的进程ID并设置   所有这些都是静音状态。

这就是问题所在。现在它完美无缺。