我有资料.不过,你一样可以在网上查出来.发送短消息有很多种方法.第一:控制手机,第二:控制GSM模块,第三:通过短消息网关,不知道你说的Mobile是什么意思.在GSM协议中.有MT,ME,不知道你说的究竟是什么,说清楚点.
解决方案 »
- 请问:XP下安装SQLSERVER个人版时运行AUTORUN.exe直接不反应,请问如何解决?我以前装过企业版的,现已卸载了,注册表也删除了,安装文件夹也删除了。请问为什么?
- DLL中的Forms问题,大家来看一下啊!!
- 多线程调用web service出现错误提示:尚未调用 CoInitialize
- 怎么Copy一条或多条记录
- 谁在用D7,用来设计rave报表控件的那个程序好像很不好用,界面跳来跳去,不要Dock也Dock,有许多地方等待改进
- 跪求 delphi pos 中打印机钱箱的完全控制
- 请问怎样启动ie浏览一个网页,并且打开新的ie窗口,不使用当前ie窗口?
- 求解一句SQL语句,简单之极!
- 关于MDI的问题,请高手帮我
- 成立虚拟小团队,开发自己的东西!有兴趣进来看看.
- 大家一起来分析这个问题:一个我喜欢的女生送给我巧克力,有代表某层含义吗?
- 100分求解:MIDAS应用服务器方法参数问题
我知道你的方法,但我不是通过网络来发的,我是通过手机数据线来发送的!
然后用WRITEFILE向COM1发送数据,这样可以吗?如果可以,拿我怎么接收它的返回信息呢?(显示在MEON1)上。
同时,你是否可以给我你的QQ号,和EMAIL,我可以更好的和你联系!
我的QQ是(10739201),EMAIL 是:[email protected]
期望你的回复!
多谢了!十分感激!
2.从手机制造商哪里下载软件.
标准的text文本发送模式
发送
at+cmgs="+86(手机号码)"+#13+#10返回
>发送
消息内容返回
+CMGS [发送标号]
OK至于接收.你用的应该是Comm控件吧,当ReceiveCount>0的时候,缓冲区有数据,
用Input的方法就可以读出来了.
谢谢!
我还想知道用PDU格式发送时,必须把AT命令转化成16进制的数吗?该怎么转换?
哦,不好意思,我是看到的啊:(
这个好象可以啊
http://www.yiwant.com/download1.htm
电脑连接手机收发短消息的二次开发工具,包括一个实现短消息收发功能的DLL、函数说明和一个DELPH程序源代码。
www.yiwant.com/cgi-bin/click.cgi?job=down&filename=sms-delphi
部分程序:
mplementation{$R *.DFM}
//=============DLL 函数调用声明 开始 =========
procedure ConnectToMobile;stdcall; external 'SMSLIB.DLL';
procedure DisconnectToMobile;stdcall; external 'SMSLIB.DLL';
Function IsConnected:boolean;stdcall; external 'SMSLIB.DLL';
Function IsBusy:boolean;stdcall; external 'SMSLIB.DLL';
procedure InitMobile;stdcall; external 'SMSLIB.DLL';
procedure SetSMC(SMC:PChar);stdcall; external 'SMSLIB.DLL';
Function SendSMS(phone,text:PChar):boolean;stdcall; external 'SMSLIB.DLL';
Function ReadSMS(Text,sendnum,smc,time:PChar):boolean;stdcall; external 'SMSLIB.DLL';
//=============DLL 函数调用声明 结束 =========procedure TForm1.Button1Click(Sender: TObject);
begin
ConnectToMobile;
memo2.Lines.Add ('已经发出连接命令。');
sleep(4000); //等待4秒,等待手机准备好
while not IsConnected do ; //直到连接成功 memo2.Lines.Add ('已经连接到手机。');
InitMobile;
memo2.Lines.Add ('已经初始化。');
SetSMC(PChar(SMC.Text ));
memo2.Lines.Add ('短信中心设置成功。');end;
at+cmgf=0 ----使用pdu模式
at+cmgf=1 ----使用text模式
但是,你首先要看nokia的手机是否支持pdu格式。
不过,我想应该是支持的。
因为text模式不支持中文短消息。你要先查查pdu格式手册,每一个短信中心的pdu格式不是很一致的。
没有必要做什么16进制的转换啊。如果发送中文,那么用的是uc2码。比如说发送给手机号码为123456789ab的手机发送1234。那么pdu格式应该是
0891683108200905f011000b816821436587a9fb0004+短信息内容长度(16进制)+短信息内容
对不起!
0891683108200905f011000b816821436587a9fb0004,是什么意思,是PDU的标准格式吗?
同时,我想问一下,INPUT怎么用,麻烦你说一下好吗?
你给我的网址可以用吗?
procedure Tform1.BitBtn1Click(Sender: TObject);
var i:integer;
begin
ContentCode:='';
phone:=edit1.Text;
phonecode:='';
if length(phone)<>11 then
begin
showmessage ('输入号码不对');
comm1.StopComm ;
exit;
end;
phonecode:=phone[2]+phone[1]+phone[4]+
phone[3]+phone[6]+phone[5]+phone[8]+phone[7]+
phone[10]+phone[9]+'f'+phone[11];
//showmessage(phonecode);
content:=memo1.Text;
for i:=1 to length(content) do
ContentCode:=ContentCode+inttohex(ord(content[i]),4); textlen:=inttohex(length(content)*2,2);
SCA:='0891683108702705f0'; //短信中心号码13800772500
TPDU:='11000D9168'+phonecode+'000800'+textlen+contentcode;
//showmessage(SCA+TPDU);
pdulength:=inttostr(length(TPDU) div 2);
ATCOMM:='at+cmgs='+pdulength+chr(13)+chr(10);
//showmessage(atcomm);
i:=LENGTH(ATCOMM);
//sleep(20);
//SHOWmessage(inttostr(i));
comm1.WriteCommData (pchar(ATCOMM),i) ;
ATCOMM2:=SCA+TPDU+chr(26);
comm1.WriteCommData (pchar(ATCOMM2),length(ATCOMM2));
end;你要改写短信中心号码,改为当地的号码.
这是用pdu方式发送中文。
mscomm来控制串口。windflow(飘) 的代码可以借鉴一下。
当然,你首先要搞清楚你们那里短信息 中心的号码。不过,要搞清楚pdu格式,可不是一天两天就可以搞ok的。建议你还是先看Text模式吧。
windflow? 是什么?怎样参考?
mscomm 控件在哪儿可以找到?
同时,我想问一下,你哪儿有GSM的第三方控件吗?如果有,给我发一个好吗?
或者,告诉我哪儿可以下载到?
谢谢了!
我错把windflow当成是控件了!
在此对windflow说对不起了!
谢谢你的回复!
同时我想问一下,你是怎样接收手机发送的返回信息的呢?以及怎样把它显示在memo1上!
谢谢了!
procedure Tform1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var i:integer;reback:array [1..1024] of byte;
viewstring:string;
begin
for i:=1 to 1024 do reback[i]:=$00;
memo1.Clear ;
viewstring:='';
move(buffer^,reback,bufferlength);
for i:=1 to bufferlength do viewstring:=viewstring+chr(reback[i]);
memo1.Lines.Add (viewstring);
end;
var s:string;
s:='at+cmgr=1'+chr($0d)+chr($0a);
comm1.WriteCommData(pchar(s),length(s));
comm1是spcomm控件的实例。
在spcomm的事件中用上面的代码.
谢谢你们的回复!
帮我解决了许多问题!
真的很感谢你们!
好人一生平安!
我现在又遇到了一个问题,关于SMS的,请帮我一下,我开个贴子给你加100分。
我如何才能知道,串口(COM1)已经和手机数据线连上了呢?
同时我也很希望和你交个朋友。我的QQ是:10739201!
期待你的回复!
谢谢!