我只想拨出电话号码,请问应用那个函数?(300分)(300分)

  • 主题发起人 主题发起人 黄忠伟
  • 开始时间 开始时间

黄忠伟

Unregistered / Unconfirmed
GUEST, unregistred user!
我在做一个通讯录,只想从modem直接拨出某人的电话号码,我调用了win98的
电话拨号程序,在它的后面写上参数如:c:/windows/dialer.exe 2877888 结果只能
调出电话拨号程序而不能拨出号码,我觉得应该有个api函数的,
请问应该怎样写?最好不要用控件,用at指令也行,谢谢!
 
直接向串口发ATDT#######
//#代表电话号码
 
at指令我知道,请问在哪个函数里面写发向串口的at指令?谢谢
 
用TApi函数,你可以在网上查一查,可以拨电话,发传真,传文件,是Micro$oft
的,现在应该是TApi 3.0了吧
 
只要用createfile(),read(),write()这样的API函数就可以啊,看看msdn里就有。
 
看好了给分。
procedure dialer(num :string);
var PhoneNumber :string
begin
PhoneNumber := 'ATDT'+Num + #13 + #10;
CommPort :='COM'+InputBox('','请输入Modem所在端口1=com1,','1');
{Open the comm port}
hCommFile := CreateFile(PChar(CommPort),
GENERIC_WRITE,
FILE_SHARE_WRITE,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if hCommFile=INVALID_HANDLE_VALUE then
begin
ShowMessage('Unable to open '+ CommPort);
exit;
end;

{Dial the phone}
NumberWritten:=0;
if WriteFile(hCommFile,PChar(PhoneNumber)^,Length(PhoneNumber),NumberWritten,nil)=false then
begin
showmessage('Unable to write to ' + CommPort);
end;
end;
 
对楼上代码修改如下:
procedure dialer(num :string);
var PhoneNumber: string;
CommPort: String;
hCommFile: THANDLE;
NumberWritten: Dword;
begin
PhoneNumber := 'ATDT'+Num + #13 + #10;
CommPort :='COM'+InputBox('','请输入Modem所在端口1=com1,','1');
{Open the comm port}
hCommFile := CreateFile(PChar(CommPort),
GENERIC_WRITE,
FILE_SHARE_WRITE,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if hCommFile=INVALID_HANDLE_VALUE then
begin
ShowMessage('Unable to open '+ CommPort);
exit;
end;

{Dial the phone}
NumberWritten := 0;
if WriteFile(hCommFile,
PChar(PhoneNumber)^,
Length(PhoneNumber),
NumberWritten,
nil) = false then
begin
showmessage('Unable to write to ' + CommPort);
end;
end;
 
我照rrr的做了,没反应,结果如下:
1,做一个按钮调用 dialer('114');单击按钮
2,在提示框中输入串口号,我的是 2
3,没有听到拨号音,我的外猫的灯也没有闪,就一个灯亮,也没有拨出号码,过程结束.
4,不退出程序再次单击按钮,同样在提示框中输入串口号2,
5,结果出现过程 dialer 中的第一个错误提示 unable to open com2,单击ok后过程结束
6,之后继续单击按钮,结果重复 5, 的现象
如果在提示框出现后输入1,现象类似,即:总是第一次单击时过程没反应,之后继续单击就
出现第一个错误提示.
请各位帮忙,谢谢

 
我写过不少类似的,可以给你部分代码,
mail to: qsilence@sina.com
看完了给分
 
晕倒!300分!严重通货膨胀!如果想听教训的话QQ54930178
 
问题已经解决,bigroute和rrr的代码中间少了初始化串口的指令,应先申明一个变量
lpdcb:Tdcb;然后在WriteFile前面加上:
setupcomm(hcom,4096,4096);
getcommstate(hcom,lpdcb);
lpdcb.baudrate:=9600;
lpdcb.StopBits:=OneStopBit;
lpdcb.ByteSize:=8;
lpdcb.Parity:=NoParity; //偶校验
Setcommstate(hcom,lpdcb);

谢谢bigroute和rrr
 
后退
顶部