1

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

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

我怎样才能使它达到这种效果?谢谢。

4

2 回答 2

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);
    }
于 2013-07-16T06:31:09.987 回答
0

我引用:在非托管代码中,您将在顶级 windowproc 中侦听WM_DEVICECHANGE 。

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

于 2013-07-16T06:30:15.993 回答