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

📄 unit1.pas

📁 gsm modem串口通信
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    Send: TButton;
    Button2: TButton;
    jshm: TEdit;
    fsnr: TMemo;
    GroupBox1: TGroupBox;
    Label2: TLabel;
    GroupBox2: TGroupBox;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    jsnr: TMemo;
    GroupBox3: TGroupBox;
    GroupBox4: TGroupBox;
    Button3: TButton;
    cwxx: TMemo;
    sqhm: TEdit;
    Label8: TLabel;
    Memo2: TMemo;
    Device: TEdit;
    Label9: TLabel;
    Label10: TLabel;
    Label7: TLabel;
    Memo3: TMemo;
    pb1: TProgressBar;
    Label11: TLabel;
    status1: TEdit;
    Baud: TEdit;
    Memo1: TMemo;
    Button1: TButton;
    Memo4: TMemo;
    Button4: TButton;
    sendState: TCheckBox;
    isClear: TCheckBox;
    procedure FormDestroy(Sender: TObject);
    procedure SendClick(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;

implementation
  { 获取短信猫授权机器码}
  function GSMModemAutoTest():PChar;
                        stdcall; external 'GSMMultiPort.dll' name 'GSMModemAutoTest';
{ 初始化gsm modem,并连接gsm modem}
  function GSMModemInit(device:PChar;
                        baudrate:PChar;
                        initstring:PChar;
                        charset:PChar;
                        swHandshake:Boolean;
                        sn:PChar):Boolean;
                        stdcall; external 'GSMMultiPort.dll' name 'GSMModemInit';

  { 获取短信猫授权机器码}
  function GSMModemGetSnInfo(device:PChar;
                        baudrate:PChar):PChar;
                        stdcall; external 'GSMMultiPort.dll' name 'GSMModemGetSnInfo';

  { 获得错误信息}
  function GSMModemGetErrorMsg(device:PChar):PChar;
                        stdcall; external 'GSMMultiPort.dll' name 'GSMModemGetErrorMsg';

  { 断开连接并释放内存空间}
  procedure GSMModemRelease(device:PChar)
                        stdcall; external 'GSMMultiPort.dll' name 'GSMModemRelease';

  { 连接状态}
  function GSMModemIsConn(device:PChar):Boolean;
                        stdcall; external 'GSMMultiPort.dll' name 'GSMModemIsConn';

  { 发送短信息}
  function GSMModemSMSsend(device:PChar;
                        serviceCenterAddress:PChar;
                        encodeval:Integer;
                        text:PChar;
                        textlen:Integer;
                        phonenumber:PChar;
                        requestStatusReport:Boolean):Boolean;
                        stdcall; external 'GSMMultiPort.dll' name 'GSMModemSMSsend';

  { 接收短信息}
  function GSMModemSMSReadAll(device:PChar;RD_opt:Integer):PChar;
                        stdcall; external 'GSMMultiPort.dll' name 'GSMModemSMSReadAll';

{$R *.dfm}

procedure TForm1.FormDestroy(Sender: TObject);
begin
end;

{ 发送短信}
procedure TForm1.SendClick(Sender: TObject);
var
  smscontent: PChar;
  number:PChar;
  smslen: Integer;
begin
  //0) 格式检查
  if jshm.Text = '' then
  begin
    showmessage('接收号码不能为空!');
    Exit;
  end;
  if fsnr.Text = '' then
  begin
    showmessage('发送内容不能为空!');
    Exit;
  end;

  //1)连接设备
  status1.Text := '正在发送短信,请稍等 ......';
  pb1.Position := 50;

  //2) 发送短信
  number :=PChar(jshm.Text);
  smscontent := PChar(fsnr.Text);
  smslen := Length(PChar(fsnr.Text));
  if GSMModemSMSsend(PChar(Device.Text),nil,8,smscontent,smslen,number,sendState.Checked) = True then
    showmessage('GSMModemSMSsend: 短信发送成功!')
  else
  begin
    showmessage('GSMModemSMSsend: 短信发送失败:' + GSMModemGetErrorMsg(PChar(Device.Text)));
    Exit;
  end;

  //3) 显示错误信息
  cwxx.Text := GSMModemGetErrorMsg(PChar(Device.Text));
  status1.Text := '发送短信完毕!';
  pb1.Position := 100;

end;

{ 读取短信}
procedure TForm1.Button2Click(Sender: TObject);
begin
  status1.Text := '正在读取短信,请稍等 ......';
  pb1.Position := 50;

  //2) 读取短信
  if isClear.Checked = True then
    jsnr.Text := GSMModemSMSReadAll(PChar(Device.Text),0)
  else
    jsnr.Text := GSMModemSMSReadAll(PChar(Device.Text),1);
    
  //3) 显示错误信息
  cwxx.Text := GSMModemGetErrorMsg(PChar(Device.Text));
  status1.Text := '读取短信完毕!';
  pb1.Position := 100;

end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  cwxx.Text := GSMModemGetErrorMsg(PChar(Device.Text));
end;

{ 连接设备}
procedure TForm1.Button1Click(Sender: TObject);
begin
  //1)检查输入参数
  if Device.Text = '' then
  begin
    showmessage('请指定通讯端口!');
    Device.SetFocus();
    Exit;
  end;
  if Baud.Text = '' then
  begin
    showmessage('请指定通讯波特率!');
    Baud.SetFocus();
    Exit;
  end;
  if sqhm.Text = '' then
  begin
    showmessage('请输入授权号码!');
    sqhm.SetFocus();
    Exit;
  end;

  //2)连接设备
  status1.Text := '正在连接设备,请稍等 ......';
  pb1.Position := 50;

  if GSMModemInit(PChar(Device.Text),PChar(Baud.Text),nil,nil,false,PChar(sqhm.Text)) = True then
    showmessage('GSMModemInit: 连接成功!')
  else
  begin
    showmessage('GSMModemInit: 连接失败:' + GSMModemGetErrorMsg(PChar(Device.Text)));
  end;
  
  //3)显示信息
  cwxx.Text := GSMModemGetErrorMsg(PChar(Device.Text));
  status1.Text := '连接完毕!';
  pb1.Position := 100;
end;

{ 退出}
procedure TForm1.Button4Click(Sender: TObject);
begin
  self.Close;
end;

{ 关闭的时候释放资源}
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 if GSMModemIsConn(PChar(Device.Text)) = True then
  GSMModemRelease(PChar(Device.Text))
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -