⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.pas

📁 使用Delphi发送短信的原码程序,可以直接用,也可以做二次开发
💻 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 + -