如何在程序中检测对方摘机。 To: Wally_wu(韦利) ,如何检测呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 To hjb8000(北极熊):多谢指教,不过我是个beginner.不知如何检测。 我有源代码,要吗?最近我也在做这个,摘机是可以判断了,就是声音效果不佳,最后Boss让我放弃了,我们公司最后决定用语音卡来实现这个功能! 其实也不难,不过下面的程序使用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} 请教,在CxGrid里输入明细数据的问题? 基于Delphi的OpenGl和DX编程,有哪些好书? ActiveX WindowsMediaPlayer运行时调整大小的问题 delphi和C的转换 dbgrid显示access中的小数有问题? 上海有沒有delphi7的正版賣? 想不通,想不通呀 同多线程相关 如何接收文本文件的数据到db2数据库中 在delphi中如何对access(无sql server)数据库维护(压缩,备份等) 谈谈考公务员 100分,左轻侯大侠的大富翁离线源码解释
最近我也在做这个,摘机是可以判断了,就是声音效果不佳,最后Boss让我放弃了,
我们公司最后决定用语音卡来实现这个功能!
打开串口,设置串口响应事件时必须设置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
}