2013-07-16 90 views
1

我有一個Windows窗體應用程序,並在此我有一個開始和一個停止按鈕。當我點擊開始按鈕時,錄音應該開始,當我點擊停止按鈕錄音應停止。它工作正常,但我的要求是當我開始錄製時,如果我拔下麥克風,錄製應該停止。但是,我目前的代碼不會這樣做。這是我目前的代碼:檢測何時麥克風被拔出

uint hr = MFRecWrapper.StartRecording(microPhoneName.Trim(), this.fileName.Trim(), this.bitSamplingBitrate, this.avgBytesWrittenPerSecond, this.Handle); 
uint hr = MFRecWrapper.StopRecording(); 

我該如何使它達到這種效果?謝謝。

回答

2

我想你將不得不通過非託管代碼和掛鉤到Windows事件。 WM_DEVICECHANGE

using System.Runtime.InteropServices; 
    const int WM_DEVICECHANGE = 0x0219; 
    // new device is pluggedin 
    const int DBT_DEVICEARRIVAL = 0x8000; 
    //device is removed 
    const int DBT_DEVICEREMOVECOMPLETE = 0x8004; 
    //device is changed 
    const int DBT_DEVNODES_CHANGED = 0x0007; 
    protected override void WndProc(ref Message m) 
    { 
     if (m.Msg == WM_DEVICECHANGE 
     { 
       //Your code here. 
     } 
     base.WndProc(ref m); 
    } 
+0

你只是幾秒鐘爲時已晚...... –

+0

什麼是0x0219?我應該硬編碼這個值嗎? IAM新的這個Windows程序,你可以請解決我的問題,通過給所有的代碼... thannk你的關注 – sree

+0

是硬編碼這個值。請參閱我已閱讀詳細信息的鏈接。 – Ehsan

0

我引用: 在非託管代碼中,您將在頂級windowproc中監聽WM_DEVICECHANGE

這似乎是在託管代碼中執行此操作的唯一方法。