关于电话拔号的问题?(100分)(100分)

  • 主题发起人 主题发起人 wind2000
  • 开始时间 开始时间
W

wind2000

Unregistered / Unconfirmed
GUEST, unregistred user!
用Delphi编了个小程序,内带电话拔号功能,可是发现无法正常拔号(只见Modem SD、TD灯闪几下就没反应了),而这时运行Windows带的电话拔号程序可以正常拔号,再回过来运行我的程序就可以正常拔号,为什么?是不是没对Modem做初始化工作?又应该怎样做初始化呢?请举例说明!
(第一次提问题,也不知道行情,送上一百大元,望笑纳!)
 
调用拨号网络里的拨号程序来连接:其中'连接Internet'为你创建的拨号程序名称
winexec('rundll32.exe rnaui.dll,RnaDial '+'连接Internet',9);
 
你是直接往串口发AT指令吗?
还是使用TAPI?
ATZ为初始化Modem
 
我是用AT指令!
用了ATZ,没效果!
 
没有打开端口?
 
以下摘自水木清华,希望对你有一些帮助

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!连通了,下面是你的事情了!
}
 
改用TAPI后OK!
 
多人接受答案了。
 
后退
顶部