To: Wally_wu(韦利) ,如何检测呢?

解决方案 »

  1.   

    To  hjb8000(北极熊):多谢指教,不过我是个beginner.不知如何检测。
      

  2.   

    我有源代码,要吗?
    最近我也在做这个,摘机是可以判断了,就是声音效果不佳,最后Boss让我放弃了,
    我们公司最后决定用语音卡来实现这个功能!
      

  3.   

    其实也不难,不过下面的程序使用C++BUIDER写的,大致流程:
    打开串口,设置串口响应事件时必须设置DCD响应事件
     if ( !SetCommState(FhCom, &dcb) ||
             !SetCommMask(FhCom, EV_RXCHAR  |
                                 //EV_BREAK   |
                                 //EV_CTS     |
                                 //EV_DSR     |
                                 //EV_ERR     |
                                 //EV_RING    |
                                 EV_TXEMPTY   |
                                 //EV_RXFLAG  |
                                 EV_RLSD     ) ||  在检察串口事件WaitCommEvent(CommHandle, &dwEventMask, &eOverLapped);
    判断dwEventMask事件中是否有DCD事件,如果有就给主线程中发消息,在该消息中处理即可
    void __fastcall TCommThread::Execute()
    {
      DWORD   dwEventMask;
      while(true)  {
        dwEventMask = 0;
        WaitCommEvent(CommHandle, &dwEventMask, &eOverLapped);
        ClearCommError(CommHandle, &ErrWord, &comstat);
        WaitForSingleObject(eOverLapped.hEvent, INFINITE);
        FBytesInQue  = comstat.cbInQue;
        FBytesOutQue = comstat.cbOutQue;
        if ( dwEventMask & EV_TXEMPTY ) {      // Êä³ö»º³åÇø¿Õ
          //PostMessageToThread( Owner->ThreadID, WM_OUTBUFFEREMPTY, 0 ,0L );
          PostMessageToThread( Owner->DataHandleThread->ThreadID, WM_OUTBUFFEREMPTY, 0 ,0L );
        }
        if ( ( dwEventMask & EV_RXCHAR ) && CanInterrupt &&
                  ( FBytesInQue >= FRThreshold ) )  {      // ÊäÈ뻺³åÇø½ÓÊÕµ½Ò»×Ö·û
          CanInterrupt = false;
          //PostMessageToThread( Owner->ThreadID, WM_OVERRTHRESHOLD,0,0);
          PostMessageToThread( Owner->DataHandleThread->ThreadID, WM_OVERRTHRESHOLD,0,0);
        }
        if ( (dwEventMask & EV_RLSD )||
             (dwEventMask & EV_BREAK )||
             (dwEventMask & EV_CTS )||
             (dwEventMask & EV_DSR )||
             (dwEventMask & EV_ERR )||
             (dwEventMask & EV_RING )||
             (dwEventMask & EV_RXFLAG ) )
        {
           PostMessageToThread( Owner->DataHandleThread->ThreadID, WM_PHONERING,dwEventMask,0);    //ÕýÔÚÕðÁå
        }
      }     // while
    }