:tanglu 时间:00-10-29 9:00:19 ID:379828
最好可能还是给www.139.com.cn的那个发短消息的wriete1.asp作个接口。
然后生成一个Http的串,用ICS的TCliHttp控件发过去。
我大概看了一下,它的用户名输入框的名字是:My_Name
你自己研究一下其他的吧
:suhaiyun 时间:00-10-31 1:12:41 ID:381207
tanglu言之有理,可以用delphi的THttp组件把信息post过去,(看dellphi例子),至于要post的
数据分析一下www.139.com.cn页面就可以知道,其格式应类似:name=zhang&phone=013901012345...
:yysun 时间:00-10-31 23:26:02 ID:382165
WAP! Delphi Does Wireless - Developing WML Applications
http://www.delphizine.com/features/2000/04/di200004jj_f/di200004jj_f.asp
(With Source Code!)
---------------------------------------
以下是通过串口和AT指令发送短消息的代码
unit uSendSms;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, MSCommLib_TLB;
type
TFrmSendSms = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
MSComm: TMSComm;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Memo1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function OpenPort() : Boolean;
// procedure SendSMS(lst : TList; Mobile : string); // 将 lst 中的邮件编辑短信发送到手机
procedure SendSMS(Mobile : string;SmsMsg:WideString); // 将 lst 中的邮件编辑短信发送到手机
procedure IniSMS(); // 初始化短消息
procedure SendInEncodeText(sms : string; mobile : string); // Text mode
procedure SendInEncodePdu(sms : string; mobile : string); // pdu mode
function EncodeGb(var s: WideString): String;
function ExchangeCode(src: string): string;
end;
var
FrmSendSms: TFrmSendSms;
implementation
uses Config;
{$R *.dfm}
procedure TFrmSendSms.Button1Click(Sender: TObject);
begin
Application.CreateForm(TfrmConfig,frmConfig);
frmConfig.ShowModal;
frmConfig.Free;
MSComm.CommPort := Config.m_Com.m_ComPort;
MSComm.Settings := Config.m_Com.m_BaudRate + ',' + Copy(Config.m_Com.m_Parity, 0, 1) + ',' + Config.m_Com.m_DataBits + Config.m_Com.m_StopBits;
end;
// 将中文GB2312编码转换为代码页为CP936的Unicode编码
function TFrmSendSms.EncodeGb(var s: WideString): String;
var
i,len:Integer;
cur:Integer;
t:String;
begin
Result:='';
len:=Length(s);
i:=1;
while i<=len do
begin
cur:=ord(s[i]);
//BCD转换
FmtStr(t,'%4.4X',[cur]);
Result:=Result+t;
inc(i);
end;
end;
// 用来交换移位
function TFrmSendSms.ExchangeCode(src: string): string;
var
Len, i : integer;
tmp : string;
begin
Len := length(src);
if (len <> 11) and (len <> 13) then
begin
ExchangeCode := '';
exit;
end;
src := src + 'F';
i := 1;
while i<=len do
begin
tmp := tmp + src[i + 1] + src[i];
inc(i, 2);
end;
ExchangeCode := tmp;
end;
procedure TFrmSendSms.IniSMS;
var
SendData : string;
begin
// 先判断串口是否打开
if not MSComm.PortOpen then
exit;
// 设置编码模式,其中Text=1, pdu = 0
if Config.m_Config.m_SMSMode = 'Text' then
SendData := 'AT+CMGF=1' + chr(13) // Text
else
SendData := 'AT+CMGF=0' + chr(13); // Pdu
MSComm.Output := SendData;
// 设置短信中心号码
// SendData := 'AT+CSCA="' + Config.m_Config.m_SMSCenter + '"' + chr(13); //2004-05-01
SendData := 'AT+CSCA' +chr(13);
// Showmessage(SendData);
MSComm.Output := SendData;
end;
function TFrmSendSms.OpenPort: Boolean;
begin
// 更新MSComm的设置
try
MSComm.CommPort := Config.m_Com.m_ComPort;
MSComm.Settings := Config.m_Com.m_BaudRate + ',' + Copy(Config.m_Com.m_Parity, 0, 1) + ',' + Config.m_Com.m_DataBits + Config.m_Com.m_StopBits;
MSComm.InBufferSize := 1024; // 指定接收缓冲区大小
MSComm.InBufferCount := 0; // 清空接收缓冲区
MSComm.InputMode := 1; // 设置数据获取方式
MSComm.InputLen := 0; // 设置读取方式
MSComm.PortOpen := True; // 打开指定的串口
OpenPort := MSComm.PortOpen; // 反回值
except
OpenPort := False;
MessageBox(self.Handle, PChar('串口' + PChar(IntToStr(Mscomm.CommPort)) + '打开失败!,请更换其它串口'),'串口打开失败',MB_OK);
end;
end;
// Pdu模式编码
procedure TFrmSendSms.SendInEncodePdu(sms, mobile: string);
var
Widesms : WideString; // 定义成WideString型,每个字符占两上字节
SendData : string;
tmp : string;
len : integer;
begin
// 参考pdu串 08 91 683108701305F0 11 00 0B 91 3176378290F9 00 00 00 02 C834
SendData := 'AT+CMGS="';
SendData := SendData + '0891';
// 每两位交换构造短信中心串
// tmp := ExchangeCode(Config.m_Config.m_SMSCenter); 2004-05-01
SendData := SendData + tmp;
SendData := SendData + '11000B91';
// 每两位交换构造接收手机号码串
tmp := ExchangeCode(mobile);
SendData := SendData + tmp;
SendData := Senddata + '0000A7';
// 将中文GB2312编码转换为代码页为CP936的Unicode编码
Widesms := WideString(sms);
tmp := EncodeGb(Widesms);
// 此处为Widesms 的长度,不是sms的长度!
len := length(Widesms);
SendData := SendData + IntToStr(len) + tmp;
SendData := SendData + '"' + chr(13);
// Pdu串构造完毕,发送
MSComm.Output := SendData;
end;
// Text模式编码
procedure TFrmSendSms.SendInEncodeText(sms, mobile: string);
var
strOut : string; // 定义成string型,一个字符用一个字节来表示
begin
strOut := 'AT+CMGS="' + mobile + '"' + chr(13); // chr(13)是回车
MSComm.Output := strOut;
strOut := sms + chr(26); // chr(26) 是 ctrl + z
MSComm.Output := strOut;
end;
procedure TFrmSendSms.SendSMS(Mobile:string;SmsMsg:WideString);
var
i : integer;
strSMS : string;
begin
// 加入发送短消息日志
if length(Mobile) <> 11 then
begin
ShowMessage('目标手机号不正确,发送短信失败!');
exit;
end;
if length(Config.m_Config.m_SMSCenter) <> 13 then
begin
ShowMessage('短信中心地址不正确,发送短信失败!');
exit;
end;
// 打开端口
if not OpenPort() then
exit;
// 初始化短消息,指定编码模式和短消息中心地址
IniSMS();
// for i := 0 to lst.Count - 1 do
begin
if Config.m_Config.m_SMSMode = 'Text' then
begin
strSMS :=SmsMsg;//Memo1.Lines.Text;
SendInEncodeText(strSMS, Mobile);
end
else
begin
strSMS :=SmsMsg;//Memo1.Lines.Text;
SendInEncodePdu(strSMS, Mobile);
end;
end;
// 关闭串口
MSComm.PortOpen := False;
end;
procedure TFrmSendSms.Button2Click(Sender: TObject);
begin
if Trim(edit1.Text)='' then
begin
Application.MessageBox('手机号码不能为空,请重新输入!','提示信息',$40);
edit1.SetFocus;
Abort;
end;
if Trim(Memo1.Text)='' then
begin
Application.MessageBox('没有可发送的短信内容,请重新输入!','提示信息',$40);
Memo1.SetFocus;
Abort;
end;
SendSMS(edit1.Text,Memo1.Text);
end;
procedure TFrmSendSms.Memo1Change(Sender: TObject);
var
strMemo:WideString;
begin
StrMemo:=Memo1.Text;
Label3.Caption:='字符数:'+IntToStr(Length(StrMemo));
end;
end.