检测麦克风拔出时的情况

时间:2013-07-16 06:16:49

标签: c# windows winforms

我有一个Windows窗体应用程序,在这里我有一个开始和一个停止按钮。当我单击 Start 按钮时,应该开始录制,当我单击 Stop 按钮时,录制应该停止。它工作正常,但我的要求是当我开始录制时,如果我拔下麦克风,录制应该停止。但是,我目前的代码不会这样做。这是我目前的代码:

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

我怎样才能达到这个效果呢?感谢。

2 个答案:

答案 0 :(得分: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);
    }

答案 1 :(得分:0)

我引述: 在非托管代码中,您将在顶级windowproc中监听WM_DEVICECHANGE

这似乎是在托管代码中执行此操作的唯一方法。