2008-09-30 2 views
16

का उपयोग कर म्यूट विंडोज वॉल्यूम म्यूट करें कोई भी जानता है कि सी # का उपयोग कर विंडोज एक्सपी वॉल्यूम को प्रोग्रामेटिक रूप से कैसे म्यूट करें?सी #

+0

यह Vista/Win7 में संभव है? – meir

+0

विस्टा के तहत और ऊपर आपको IAudioEndpointVolume का उपयोग करना होगा। –

उत्तर

0

आप शायद एमसीआई आदेशों का उपयोग करना चाहते जाएगा: http://msdn.microsoft.com/en-us/library/ms709461(VS.85).aspx

मैं जोड़ने चाहिए, जबकि यह आप विंडो में इनपुट और आउटपुट मिक्सर पर अच्छाई सामान्य नियंत्रण देगा, आप विस्तृत नियंत्रण कर के साथ कुछ परेशानी हो सकती है, माइक बूस्ट, आदि की तरह

ओह, और यदि आप Vista पर हैं, तो बस इसे भूल जाएं। यह एक बिल्कुल अलग मॉडल है।

0

आप पी/Invoke का उपयोग यहां समझाया जा सकता है: http://www.microsoft.com/indonesia/msdn/pinvoke.aspx। यह वास्तव में कार्य 1 में चरणों के माध्यम से चला जाता है: शीर्ष के पास म्यूट करें और अनम्यूट ध्वनि।

2

मैं this project पर आया जो कि यदि आप Vista चला रहे हैं तो रुचि हो सकती है।

12

पी/आह्वान के लिए इस घोषित:

private const int APPCOMMAND_VOLUME_MUTE = 0x80000; 
private const int WM_APPCOMMAND = 0x319; 

[DllImport("user32.dll")] 
public static extern IntPtr SendMessageW(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam); 

और फिर मूक/ध्वनि अनम्यूट करने के लिए इस लाइन का उपयोग करें।

SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle, (IntPtr) APPCOMMAND_VOLUME_MUTE); 
+1

XP धन्यवाद में एक इलाज किया। हालांकि मैं डब्ल्यूपीएफ का उपयोग कर रहा हूं इसलिए ऐसा नहीं है। हैंडल। इसके बजाए: 'सार्वजनिक स्थिर शून्य ToggleMute (IntPtr हैंडल) { SendMessageW (हैंडल, WM_APPCOMMAND, हैंडल, (IntPtr) APPCOMMAND_VOLUME_MUTE); } ' डब्ल्यूपीएफ विंडो में: ' वॉल्यूमएक्सपी। टॉगलम्यूट (नया विंडोइंटरोपेलपर (यह) हैंडल); ' –

+1

यह ... विंडोज 7 पर काम किया - लेकिन मैं एक पुस्तकालय में हूं, जो पृष्ठभूमि में चलाया जाता है - किसी भी चीज में जो कभी खिड़की नहीं रखेगा - मैं एक और खिड़की को म्यूट करने की कोशिश कर रहा हूं - यह काम करता है - लेकिन जो भी मैं हैंडल के लिए पास करता हूं, (किसी अन्य एप्लिकेशन की विंडो हैंडल इत्यादि), यह सिर्फ म्यूट करता है मास्टर सिस्टम वॉल्यूम ... – BrainSlugs83

+0

आप '0x80000' का उपयोग क्यों करते हैं? 'APPCOMMAND_VOLUME_MUTE' को' 8' के रूप में परिभाषित किया गया है? हालांकि जब मैं '8' का उपयोग करता हूं तो यह विफल हो जाता है, लेकिन जब मैं आपके' 0x80000' का उपयोग करता हूं तो यह काम करता है। यह गलत है। – Noitidart

3

क्या आप Windows Vista/7 के लिए शायद 8 भी इस्तेमाल करते हैं और कर सकते हैं:

आप उपयोग कर सकते हैं NAudio (http://naudio.codeplex.com/releases/view/79035)। नवीनतम संस्करण डाउनलोड करें। डीएलएल निकालें और अपने सी # प्रोजेक्ट में डीएलएल न्युडियो का संदर्भ लें।

फिर सभी उपलब्ध ऑडियो उपकरणों के माध्यम से फिर से कोड करने के लिए निम्न कोड जोड़ें और यदि संभव हो तो इसे म्यूट करें।

try 
    { 
     //Instantiate an Enumerator to find audio devices 
     NAudio.CoreAudioApi.MMDeviceEnumerator MMDE = new NAudio.CoreAudioApi.MMDeviceEnumerator(); 
     //Get all the devices, no matter what condition or status 
     NAudio.CoreAudioApi.MMDeviceCollection DevCol = MMDE.EnumerateAudioEndPoints(NAudio.CoreAudioApi.DataFlow.All, NAudio.CoreAudioApi.DeviceState.All); 
     //Loop through all devices 
     foreach (NAudio.CoreAudioApi.MMDevice dev in DevCol) 
     { 
      try 
      { 
       //Show us the human understandable name of the device 
       System.Diagnostics.Debug.Print(dev.FriendlyName); 
       //Mute it 
       dev.AudioEndpointVolume.Mute = true; 
      } 
      catch (Exception ex) 
      { 
       //Do something with exception when an audio endpoint could not be muted 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     //When something happend that prevent us to iterate through the devices 
    } 
+0

धन्यवाद। यह लाइब्रेरी काम करती है जब मैंने कोशिश की सभी अन्य विफल रही। मेरी समस्या इस के समान थी, लेकिन बिल्कुल वही नहीं। यह एक बहुत अच्छा खोज है। काश मैं आपको एक से अधिक बार वोट दे सकता हूं। – David

+0

उपरोक्त और प्रतिक्रिया के लिए धन्यवाद। ध्वनि को म्यूट करने का एक आसान तरीका मिलने से पहले मैंने थोड़ी देर की खोज की। इसलिए, मैंने सोचा, कुछ stackoverflow सवालों पर ज्ञान फैलाओ :) मुझे खुशी है कि यह किसी की मदद की। –

2

देखें How to programmatically mute the Windows XP Volume using C#?

void SetPlayerMute(int playerMixerNo, bool value) 
{ 
     Mixer mx = new Mixer(); 
     mx.MixerNo = playerMixerNo; 
     DestinationLine dl = mx.GetDestination(Mixer.Playback); 
     if (dl != null) 
      foreach (MixerControl ctrl in dl.Controls) 
       if (ctrl is MixerMuteControl) 
       { 
        ((MixerMuteControl)ctrl).Value = (value) ? 1 : 0; 
        break; 
       } 
}