高手速来拿分,一个关于电话拨号的问题(100分)

D

dyfh

Unregistered / Unconfirmed
GUEST, unregistred user!
我正用一个名为TRAS的控件做一个电话拨号程序,但输入我公司一个分机电话
号码后,对方接起电话,我这边RAS.ConnectState仍为RASCS_ConnectDevice
,过一段时间RAS.ConnectState为ERROR_NO_ANSWER,为何!?用同程序拨号
上网时无此问题,请问有何办法判断对方已接起电话。在下先谢了。
 
To g622 :
我当然知道听,但我需要更有建设性的意见。
 
listen表示关注问题
 
谢谢gxg8816的解释 :)
 
拨号函数会返回是否接通,若接通即可把控制权叫给拥护。
 
通过RAS用标准的设备是不可能判断是否有非MODEM/FAX的设备(或人)对
呼叫的应答的。
不过如果老兄不惜代价一定要实现这个功能,可以自己做硬件。不过这就是
另外一个问题了。
 
我想他只是要知道是否接通。
以下摘自水木清华,希望对你有一些帮助

1,拨号
接收方先写入字串"ats0=1",=1的含义是响铃一次摘机,可以根据需要改变.
拨号方写"atdtxxxxxxxx",xxxx就是电话号码.
接下来要做的事情是检测载波信号.
具体做法如下(一种方案:用bcb的Timer实现,你也可以编线程实现)
在Timer里加上下面几句话:
DWORD flag;
GetCommModenStatus(hCom,&flag);
if(flag&MS_RLSD_ON)
{
//连通了.
}
Note:
hCom 前面打开的串行口文件.
2,微机间通过Modem交换数据
打开串行口,外加at指令集.
HANDLE hcom;
hcom=CreateFile("COM2",GENERIC_READ|GENERIC_WRITE,
0,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,0);
if(hcom==INVALID_HANDLE_VALUE)
MessageBox(0,"error","error",MB_OK);
if(!SetupComm(hcom,4096,4096))
MessageBox(0,"error1","error1",MB_OK);
if(!GetCommState(hcom,&dcb))
MessageBox(0,"error2","error2",MB_OK);
dcb.BaudRate=CBR_4800;
dcb.StopBits=ONESTOPBIT;
dcb.ByteSize=8;
dcb.fParity=FALSE;
dcb.fDsrSensitivity=TRUE;
dcb.fDtrControl=DTR_CONTROL_ENABLE;
dcb.fRtsControl=RTS_CONTROL_ENABLE;
if(!SetCommState(hcom,&dcb))
{
ShowMessage(GetLastError());
}
上面是打开串行口.(BCB实现)
如果用VC应该很好改写吧,我想
3,检测摘机信号(VC下实现)
DWORD flag;
GetCommModenStatus(hCom,&flag);
if(flag&MS_RLSD_ON)
~~~~~~~~~~
{
//ok!连通了,下面是你的事情了!
}
 
看到各位的回复深感自己太菜,对你们的建议大半看不懂,这一问题告一段落,因小
弟一时无法证实你们的回复,给分可能不尽合理请见谅。
 
多人接受答案了。
 
顶部