📄 main.pas
字号:
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ComCtrls, ExtCtrls;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
GroupBox4: TGroupBox;
GroupBox5: TGroupBox;
Memo1: TMemo;
ComboBox1: TComboBox;
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
SpeedButton4: TSpeedButton;
BitBtn1: TBitBtn;
Label3: TLabel;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
Label4: TLabel;
ComboBox2: TComboBox;
ComboBox3: TComboBox;
Label5: TLabel;
Label6: TLabel;
StaticText1: TStaticText;
Timer1: TTimer;
Label7: TLabel;
procedure BitBtn1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure SpeedButton4Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
sendstatu:integer;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//函数说明
//先初始化,然后发送或者接收,退出程序前关闭Modem
{*************************************************************}
// 参数: nComNo 0~255 代表COM编号,
// modemType 短信猫类型
// 0 - 1口短信猫,
// 1 - 2口短信猫,
// 2 - 4口短信猫,
// 3 - 8短信猫口
// 返回: 0 - 成功, -1类型错
// XXX -错误代码,参见代码表
{*************************************************************}
function fnSetModemType(ComNo:integer; modemType:Smallint) :integer;stdcall; external 'MonDem.dll';
{******************************************************}
// 获取当前短信猫类型设置
//参数: nComNo 0~255 代表COM编号。
//返回 :短信猫类型
//0 - 1口短信猫,
//1 - 2口短信猫,
//2 - 4口短信猫,
//3 - 8短信猫口
//XXX -错误代码,参见代码表
{*******************************************************}
function fnGetModemType(ComNo:integer):integer;stdcall; external 'MonDem.dll';
{***********************初始化函数***********************}
//参数: comx 0~7 代表端口号码, -1 表示所有端口
//返回: 0 - 成功 XXX -错误代码,参见代码表
{********************************************************}
function fnInitModem(comx:integer):integer;stdcall; external 'MonDem.dll';
{***********************发送函数*************************}
//参数: comx 0~7 代表端口号码, -1 表示任意一个可用端口
//receivephone 接受手机号,sendmsg表示发送信息内容
//sendmsg(应该在70个字符以内,包含标点符号,1个汉字算1个字符)
//例如: 恭喜发财,测试成功! 长度为10
//返回: 0 - 发送成功 1 - 发送失败 XXX -错误代码,参见代码表
{********************************************************}
function fnSendMsg(comx:integer;receivephone,sendmsg:pchar):integer;stdcall; external 'MonDem.dll';
{********************************************************}
// 参数: nPortNo 0~255 代表端口号码, -1 表示所有端口
//返回: 端口状态,大于等于8表示设备连接正常,可以接收和发送。
// 状态小于8,表示测试状态。小于等于1,可能连线没有接好或者电源
// 没有打开,注意复位短信猫。
// -1 端口号指定错误或者是端口未打开
{********************************************************}
function fnGetStatus(nPortNo:integer):integer;stdcall; external 'MonDem.dll';
{*************************接收函数***********************}
//参数: comx 0~7 代表端口号码,
//(-1 表示任意一个可用端口,暂时不支持)
//sendphone 发送方手机号码 receivemsg 接收信息内容
//返回: 0~7 - 成功,接收端口号码 -1 - 无信息
//XXX -错误代码,参见代码表
{********************************************************}
function fnReadMsgEx(comx:integer;szHeader,receivemsg:pchar):integer;stdcall; external 'MonDem.dll';
function fnGetSndCount(nPortNo:integer):integer;stdcall; external 'MonDem.dll';
function fnGetRecCount(nPortNo:integer):integer;stdcall; external 'MonDem.dll';
//function fnSetReceive(nType:integer):integer;stdcall; external 'MonDem.dll';
{************************关闭函数************************}
//参数: comx 0~7 代表端口号码, -1 表示所有端口
//返回: 0 - 成功 XXX -错误代码,参见代码表
{********************************************************}
function fnCloseModem(comx:integer):integer;stdcall; external 'MonDem.dll';
{*******************错误代码表:**************************}
// 100: 授权错误(检测软件狗)
// 101: 授权类型错误(检测软件狗类型)
// 102: 未初始化,请先初始化
// 200: 端口号码错
// 201: 不支持的端口
// 202: 信息超长
// 203: 不能发送空信息
// 204: 手机号码错
// 205: 设备错
//5xx: 操作xx号端口错误
{********************************************************}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
close;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
fnCloseModem(-1);
Timer1.Enabled:=false;
end;
procedure TForm1.SpeedButton4Click(Sender: TObject);
var
i:integer;
begin
i :=fnCloseModem(-1);
if i=0 then
messagebox(self.Handle,pchar('释放'+ComboBox1.Text+'端口成功!'),'释放端口',mb_ok or mb_iconinformation)
else
messagebox(self.Handle,pchar('释放'+ComboBox1.Text+'端口失败,错误代码:'+inttostr(i)),'释放端口',mb_ok or mb_iconerror);
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
var
i:integer;
pno:integer;
lx:integer;
st:integer;
begin
if fnSetModemType(ComboBox1.ItemIndex,ComboBox2.ItemIndex)=0 then
begin
ComboBox3.Items.Clear;
pno:=-1;
for i:=0 to ComboBox1.ItemIndex-1 do
begin
lx:=fnGetModemType(i) ;
case lx of
0: inc(pno,1);
1: inc(pno,2);
2: inc(pno,4);
3: inc(pno,8);
end;
end;
//本端口的通道编号
case ComboBox2.ItemIndex of
0: begin
st:=fnInitModem(pno+1);
ComboBox3.Items.Add(inttostr(pno+1)+','+inttostr(st));
end;
1: for i:=1 to 2 do
begin
st:=fnInitModem(pno+i);
ComboBox3.Items.Add(inttostr(pno+i)+','+inttostr(st));
end;
2: for i:=1 to 4 do
begin
st:=fnInitModem(pno+i);
ComboBox3.Items.Add(inttostr(pno+i)+','+inttostr(st));
end;
3: for i:=1 to 8 do
begin
st:=fnInitModem(pno+i);
ComboBox3.Items.Add(inttostr(pno+i)+','+inttostr(st));
end;
end;
messagebox(self.Handle,'初始化端口完成','初始化',mb_ok or MB_ICONINFORMATION);
ComboBox3.ItemIndex:=0;
Timer1.Enabled:=true;
end
else
begin
messagebox(self.Handle,pchar('设备类型设置出错,错误代码:'+inttostr(i)),'初始化',mb_ok or mb_iconerror);
edit1.Enabled:=false;
edit2.Enabled:=false;
ComboBox3.Enabled:=false;
BitBtn3.Enabled:=false;
BitBtn4.Enabled:=false;
end;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
{ if not (key in ['0'..'9',#8,#13]) then
key :=#0;}
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
var
i:integer;
begin
BitBtn3.Enabled:=false;
if sendstatu>=8 then
begin
if ComboBox3.ItemIndex=0 then
i :=fnSendMsg(-1,pchar(edit1.Text),pchar(edit2.Text))
else
i :=fnSendMsg(StrToIntDef(copy(ComboBox3.Text,1,pos(',',combobox3.Text)-1),-1),pchar(edit1.Text),pchar(edit2.Text));
case i of
0..255:begin
StaticText1.Caption:='提交成功' ;
messagebox(self.Handle,'提交成功','提示',mb_ok or mb_iconinformation);
end;
-1 : begin
StaticText1.Caption:='提交失败' ;
messagebox(self.Height,'提交失败' ,'发送失败',mb_ok or mb_iconerror);
end;
else
begin
StaticText1.Caption:='提交出错,出错代码:'+inttostr(i);
messagebox(self.Handle,pchar('提交出错,出错代码:'+inttostr(i)),'发送失败',mb_ok or mb_iconerror);
end;
end;
end
else
begin
messagebox(self.Handle,pchar('检测设备连接不正常!'),'失败',mb_ok or mb_iconerror);
end;
BitBtn3.Enabled:=true;
end;
procedure TForm1.BitBtn4Click(Sender: TObject);
var
phone,msg:pchar;
l,i,ret:integer;
begin
ret:=fnGetSndCount(StrToIntDef(copy(ComboBox3.Text,1,pos(',',ComboBox3.Text)-1),-1));
if ret<>-1 then
messagebox(self.Handle,pchar('发送队列表中有:'+inttostr(ret)+'条信息'),'读取信息',mb_ok or mb_iconinformation) ;
ret:=fnGetRecCount(StrToIntDef(copy(ComboBox3.Text,1,pos(',',ComboBox3.Text)-1),-1)) ;
if ret<>-1 then
begin
messagebox(self.Handle,pchar('接收队列表中有:'+inttostr(ret)+'条信息'),'读取信息',mb_ok or mb_iconinformation) ;
for l:=1 to ret do
try
GetMem(phone,128);
GetMem(msg,500) ;
i :=fnReadMsgEx(StrToIntDef(copy(ComboBox3.Text,1,pos(',',ComboBox3.Text)-1),-1),phone,msg);
case i of
0..255:begin
if StrPas(phone)[1] in ['2'..'5'] then
messagebox(self.Handle,pchar('发送失败,手机号为:'+phone+'信息为:'+msg),'读取信息',mb_ok or mb_iconinformation)
else
if StrPas(phone)[1]='1' then
messagebox(self.Handle,pchar('发送成功,手机号为:'+phone+'信息为:'+msg),'读取信息',mb_ok or mb_iconinformation)
ELSE
if StrPas(phone)[1]='0' THEN
messagebox(self.Handle,pchar('接收到信息,手机号为:'+phone+'信息为:'+msg),'读取信息',mb_ok or mb_iconinformation)
else
if StrPas(phone)[1]='6' THEN
messagebox(self.Handle,pchar('接收到状态报告,手机号为:'+phone+'信息为:'+msg),'读取信息',mb_ok or mb_iconinformation) ;
end;
-1 : messagebox(self.Height,pchar('端口无信息!' ),'读取信息',mb_ok or mb_iconinformation);
else messagebox(self.Handle,pchar('端口读取信息错误,错误代码:'+inttostr(i)),'读取信息',mb_ok or mb_iconerror);
end;
finally
FreeMem(phone);
FreeMem(msg);
end;
end
else
messagebox(self.Handle,'端口号指定错误','读取信息',mb_ok or MB_ICONERROR) ;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
sendstatu:= fnGetStatus(StrToIntDef(copy(ComboBox3.Text,1,pos(',',ComboBox3.Text)-1),-1));
StaticText1.Caption:='测试'+inttostr(sendstatu) ;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -