我想实现最基本的‘发短信’功能,在delphi中传送指令如下:at+cpms="ME","ME","ME" // 设定首选存储区
at+cmgf=1 // text mode
at+csca="13800290500",129 // 说明短信中心地址
at+csmp=17,167,0,0 // 设定mode参数
at+cmgs="13609241873",129
> this is a test programme!!!^Z // 发短信但是,程序执行之后,没有任何反应,请高手指出程序错误或者调试方法???
谢谢!
at+cmgf=1 // text mode
at+csca="13800290500",129 // 说明短信中心地址
at+csmp=17,167,0,0 // 设定mode参数
at+cmgs="13609241873",129
> this is a test programme!!!^Z // 发短信但是,程序执行之后,没有任何反应,请高手指出程序错误或者调试方法???
谢谢!
解决方案 »
- [求助]FastReport显示数据问题!
- 爱莲说
- 求解Activex问题
- 谁有系统介绍存储过程,触发器,试图的资料,最好有些实例的!!
- 【整理】对键盘的ASCII码整理了一下,有要用的进来看吧...但几个键没找到,请各位帮助找一下。
- 一个好的在线学习,及资料下载基地
- 我用了shelltreeview程序变慢了!?
- 在添加代码时,一直提示如下错误,请前辈指点!
- 我想建立一个可自由定制的TreeView形的分类表,每个Node都和数据库中的某些记录相关联,请给些建议
- 救命啊!!!delphi不认识URLdownloadtofile啊???
- 外循环10万多次,内循环1万多次,如何加快速度啊?
- 报表自定义格式打印
at+cmgs=""引号里应该是UNICODE码不是GB码,后面加#26结束就是加CTRL+Z
var
cc:TCOMMCONFIG;
Temp:string;
begin
Temp := ComName; // 选择所要打开的COM
//Temp:='COM1';
hComm:=CreateFile(PChar(Temp), GENERIC_READ or GENERIC_WRITE,
0, nil, OPEN_EXISTING, 0, 0);// 打开COM
if (hComm = INVALID_HANDLE_VALUE) then begin//如果COM 未打开
MessageBox (0, '打开通信端口错误!!','',MB_OK);
exit;
end; GetCommState(hComm,cc.dcb); // 得知目前COM 的状态
cc.dcb.BaudRate:=CBR_115200; // 设置波特率为115200
cc.dcb.ByteSize:=8; //字节为 8 bit
cc.dcb.Parity:=NOPARITY; // Parity 为 None
cc.dcb.StopBits:=ONESTOPBIT;// 1 个Stop bit if not SetCommState(hComm, cc.dcb) then begin// 设置COM 的状态
MessageBox (0, '通信端口设置错误!!!','',MB_OK);
CloseHandle(hComm);//关闭通信端口
exit;
end;
end;
var
s: string;
i, j, k: integer;
a: array [1..1000] of char;
begin
s:='';
StringToWideChar(GB, @(a[1]), 500);
i:=1;
while ((a[i]<>#0) or (a[i+1]<>#0)) do
begin
j:=Integer(a[i]); k:=Integer(a[i+1]);
s:=s+Copy(Format('%X ',[k*$100+j+$10000]) ,2,4);
i:=i+2;
end;
Result:=s;
end;function ReadHex(AString:string):integer;
begin
Result:=StrToInt('$'+AString)
end;function UnicodeToAnsi(Unicode: string):string;
var
s:string;
i:integer;
j,k:string[2];
begin
i:=1;
s:='';
while i<Length(Unicode)+1 do begin
j:=Copy(Unicode,i+2,2);
k:=Copy(Unicode,i,2);
i:=i+4;
s:=s+Char(ReadHex(j))+Char(ReadHex(k));
end;
if s<>'' then
s:=WideCharToString(PWideChar(s+#0#0#0#0))
else
s:='';
Result:=s;
end;
//var
// i: Integer;
begin
SendData('AT+CMGF=1',False);
MyMethod.Delay(300);
SendData('AT+CSCS="UCS2"',False);
MyMethod.Delay(300);
SendData('AT+CSMP=17,167,0,25',False);
MyMethod.Delay(300);
end;procedure TfrmMain.SendData(AStr: string; AFlag: Boolean); //发送信息至串口
Var
s: string;
lrc:LongWord;
begin
if (hComm=0) then
exit;//若尚未打开通信端口,则跳出
if not AFlag then
s := AStr+Chr(13)+Chr(10)
else
s := AStr+#26;
WriteFile(hComm,Pointer(s)^,Length(s), lrc, nil); //送出数据
//comm1.WriteCommData(Pchar(s),Length(s));
end;你的SIM卡波特率一定要设置对,短信中心先在手机里面设置好,不要在程序中设置她
你可以先在电脑-附件-超级终端里面试,如果这里面行,那程序里发送同样的字符串过去就可以了
还有,'AT+CSMP=17,167,0,25'中,25这个参数是什么意思?诚心求教!!