如何在程序中检测对方摘机。 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} 求qq服务器定时向客户端发送消息或客户端定时向服务器索要消息[清洁工帮忙] 为什么我的Qreport打印预览时什么都没有,打印设置和打印按钮都是不可用的? 分割成BPL后,为何主程序(EXE)大小没变少? 程序员..请进 各位好!一个菜鸟问题:请问dBase中查询只返回第一条记录的SQL该怎样写? 开发过电子病历的进入! 请教FTP的问题 求助,delphi中图片存取问题? 打印图象的实际问题,急! 高分悬赏可用的Kylix正式版下载地址! 谈谈考公务员 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
}