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

📄 main.pas

📁 通过网关发手机短信
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, RzPanel, Trayico, Menus, Buttons, ComCtrls,
  RzButton, DB, ADODB, RzLabel,DBClient,StrUtils;

type
//********************************************************************
    //自定义类型
    THandle = Integer;
    JL_HANDLE = Integer;
    PJL_HANDLE = ^JL_HANDLE;

    //以HTTP方式登陆返回操作句柄,当调用退出登陆时,此句柄自动失效。// 参数说明
    T_JL_HttpLogin = function(strHost: PChar; // strHost:		主机名称或者IP地址: 'www.surge.com.cn' 不用改变
        nPort: Integer; // nPort:		端口号 : 7001 不用改变
        strUserId: PChar; // strUserId:	用户名
        strPassword: PChar; // strPassworzd:	用户密码
        strRegCode: PChar; // strRegCode:	注册码(仅 HTTP 使用):'88888888'  不用改变
        pRtnHandle: PJL_HANDLE): Integer stdcall; // pRtnHandle: 返回操作句柄

    //退出登陆时,此句柄自动失效
    T_JL_Logout = function(pHandle: JL_HANDLE): Integer stdcall; // pRtnHandle: 登陆时的操作句柄

    //单发或群发短信息
    T_JL_SendMsg = function(pHandle: JL_HANDLE; //操作句柄
        strFromPhone: PChar; // strFromPhone	短消息发送者手机号码 ,可以发送单条或者多条短信,多个号码之间用 "," 隔开
        strToPhone: PChar; // strToPhone	目的手机号码
        strContent: PChar; // strContent	信息内容
        strSendTime: PChar): Integer stdcall; // strSendTime	定时发送时间。格式:yyyy-mm-dd hh:mm:ss 为空时,表示立即发送

   //查询帐户余额
    T_JL_GetAccountBalance = function(pHandle: JL_HANDLE; fBalance: PSingle): Integer stdcall;

    // 查询帐户类型
    T_JL_GetAccountType = function(pHandle: JL_HANDLE; nType: PInteger): Integer stdcall;

    // 查询单价
    T_JL_GetAccountPrice = function(Handle: JL_HANDLE; fPrice: PSingle): Integer stdcall;

    // 查询帐户注册日期
    T_JL_GetAccountRegTime = function(Handle: JL_HANDLE; strDate: PChar): Integer stdcall;

    // 查询帐户失效日期
    T_JL_GetAccountDenyTime = function(Handle: JL_HANDLE; strDate: PChar): Integer stdcall;

    // 发送统计、 返回已发送的消息条数 、如果返回值 < 0,则请参考错误返回值定义
    T_JL_GetSendCount = function(pHandle: JL_HANDLE; // 操作句柄
        strStartDate: PChar; // 查询开始日期
        strEndDate: PChar;
        nCountWaitSend: PInteger;
        nCountTestSend: PInteger): Integer stdcall; // 查询结止日期

    // 接收短信 strFrom [21] strCreateTime[20] strContent [255]
    T_JL_ReceiveSM = function(pHandle: JL_HANDLE; // 操作句柄
        nLastMsgId: Integer): Integer stdcall; //上次接受到的最后一个MsgId,如果查询全部,则设置为0
    //获取一条短信
    T_JL_GetOneSM = function(pHandle: JL_HANDLE; // 操作句柄
        pnMsgID: PInteger; //信息id
        strFrom: PChar; //返回发送者的手机号码
        strCreateTime: PChar; // 返回发送时间
        strContent: PChar): Integer stdcall; //返回消息内容。

    // 修改用户密码
    T_JL_ModifyPassword = function(pHandle: JL_HANDLE; // 操作句柄
        strNewPassword: PChar): Integer stdcall; //strNewPassword:新的密码
//********************************************************************






  TSetupInfo = record
    FAutoRun: boolean;
    FServer: string[100];
    FDatabase: string[100];

    FUserName: string[100];
    FPassword: string[100];
    FDbUserName: string[100];
    FDbPassword: string[100];
    FTxDatabase  : string[100];
  end;
  PSetupInfo = ^TSetupInfo;

  TForm1 = class(TForm)
    PopuRight: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    TrayIco: TRxTrayIcon;
    RzPanel1: TRzPanel;
    TimerShow: TTimer;
    RzPanel2: TRzPanel;
    RzGroupBox1: TRzGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    edServer: TEdit;
    edtxDatabase: TEdit;
    edDbUser: TEdit;
    edDbPass: TEdit;
    edUser: TEdit;
    edPass: TEdit;
    OkCmd: TBitBtn;
    cbAutoRun: TCheckBox;
    RzBitBtn1: TRzBitBtn;
    RzBitBtn2: TRzBitBtn;
    RzBitBtn3: TRzBitBtn;
    RzPanel3: TRzPanel;
    Panel2: TPanel;
    Label7: TLabel;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton4: TSpeedButton;
    SaveDlg: TSaveDialog;
    RED1: TRichEdit;
    ADOConnObject: TADOConnection;
    RzGroupBox2: TRzGroupBox;
    RzBitBtn4: TRzBitBtn;
    DateTimePicker2: TDateTimePicker;
    DateTimePicker1: TDateTimePicker;
    RzLabel1: TRzLabel;
    AdoQry: TADOQuery;
    Label8: TLabel;
    EdSboDb: TEdit;
    procedure FormShow(Sender: TObject);
    procedure OkCmdClick(Sender: TObject);
    procedure TrayIcoDblClick(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormDestroy(Sender: TObject);
    procedure RzBitBtn3Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton4Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure RzBitBtn2Click(Sender: TObject);
    procedure RzBitBtn4Click(Sender: TObject);
    procedure TimerShowTimer(Sender: TObject);
    procedure RzBitBtn1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
       OneHandle: THandle; //定义一个句柄变量
        pRtnHandle: JL_HANDLE; //定义一个句柄变量
        JL_HttpLogin: T_JL_HttpLogin; //登陆
        JL_Logout: T_JL_Logout; //退出登陆
        JL_ModifyPassword: T_JL_ModifyPassword; //修改密码对象
        JL_SendMsg: T_JL_SendMsg; //发送信息
        JL_GetAccountRegTime: T_JL_GetAccountRegTime; //注册时间
        JL_GetAccountDenyTime: T_JL_GetAccountDenyTime; //截止时间
        JL_GetAccountType: T_JL_GetAccountType; //用户类型
        JL_GetAccountPrice: T_JL_GetAccountPrice; //单价/条
        JL_GetAccountBalance: T_JL_GetAccountBalance; //帐户余额
        JL_GetSendCount: T_JL_GetSendCount; //发送统计
        JL_ReceiveSM: T_JL_ReceiveSM;
        JL_GetOneSM: T_JL_GetOneSM;
    procedure Save;
    procedure SetConnected(AValue: boolean);
    procedure ShowResultMsg(num: Integer);
    procedure loginin;
    procedure sendSms;
    procedure  ReceiveSms  ;
    procedure CkFlow(AKey: Variant; AUser: string; FCancel: integer;
      Fnote: string);
    procedure ExecSQL(s:string);
    procedure OpenSQL(s: string);
    procedure getContent(AstrFrom, AstrContent: string);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
function GlbSetupInfo: TSetupInfo;
procedure LoadSetupInfo(var ARec: TSetupInfo);
procedure SaveSetupInfo(const ARec: TSetupInfo);

implementation
 uses SelfFunc,TimerDlg,SP_Utils;
{$R *.dfm}
var
  FPSetupInfo: PSetupInfo = nil;

 const
   config_file_old = 'tsconfig.dat';
  config_file = 'tssetup.dat';
function GlbSetupInfo: TSetupInfo;
begin
  if FPSetUpInfo = nil then
  begin
    New(FPSetupInfo);
    LoadSetupInfo(FPSetUpInfo^);
  end;
  Result := FPSetUpInfo^;
end;

procedure Encripty(var ARec: TSetupInfo; ASize: integer);
var
  pc: PChar;
  i: integer;
begin
  pc := PChar(@ARec);
  for i := 0 to ASize - 1 do
    pc[i] := chr(ord(pc[i]) xor $57);
end;

procedure InitSetupRec(var ARec: TSetupInfo);
begin
  with ARec do
  begin
    FAutoRun := true;
    FServer := '(local)';
    FDatabase := 'SboDemo_china';
   
    FTxDatabase := 'Txsbo';
    FUserName := '28151:admin';
    FPassword := '123456';
    FDbUserName := 'sa';
    FDbPassword := '';

  end;
end;

procedure LoadSetupInfo(var ARec: TSetupInfo);
var
  st: TStream;
  sf: string;

  procedure _LoadOld;
  begin
    sf := ExtractFilePath(ParamStr(0)) + config_file_old;
    if not FileExists(sf) then
      Exit;
    st := TFileStream.Create(sf, fmOpenReadWrite);
    st.Read(ARec, st.Size);
    st.Free;
  end;

begin
  InitSetupRec(ARec);
  sf := ExtractFilePath(ParamStr(0)) + config_file;
  if not FileExists(sf) then
  begin
    _LoadOld;
    Exit;
  end;
  st := TFileStream.Create(sf, fmOpenReadWrite);
  st.Read(ARec, st.Size);
  Encripty(ARec, st.Size); //解密
  st.Free;
end;

procedure SaveSetupInfo(const ARec: TSetupInfo);
var
  st: TStream;
  sf: string;
  ARec1: TSetupInfo;
begin
  sf := ExtractFilePath(ParamStr(0)) + config_file;
  st := TFileStream.Create(sf, fmCreate);
  ARec1 := ARec;
  Encripty(ARec1, SizeOf(TSetupInfo)); //加密
  st.Write(ARec1, SizeOf(TSetupInfo));
  st.Free;
end;



procedure TForm1.FormShow(Sender: TObject);
begin
with GlbSetupInfo do
  begin
    cbAutoRun.Checked := FAutoRun;
    edServer.Text := FServer;
    edtxDatabase.Text := FtxDatabase;
    edsbodb.Text := FDatabase;
    edDbUser.Text := FDbUserName;
    edDbPass.Text := FDbPassword;
    edUser.Text := FUserName;
    edPass.Text := FPassword;

  end;

  


end;


procedure TForm1.Save;
var
  ARec: TSetupInfo;
begin
  with ARec   do
  begin
    FAutoRun := cbAutoRun.Checked;
    FServer := edServer.Text;
    FTxDatabase := edtxDatabase.Text;
    FDatabase:=  edsbodb.Text;
    FDbUserName := edDbUser.Text;
    FDbPassword := edDbPass.Text;
    FUserName := edUser.Text;
    FPassword := edPass.Text;


  AutoLaunch_Add(ParamStr(0), 'TX-SBO短信服务器', 0);
  end;
  SaveSetupInfo(ARec);
  FPSetupInfo^ := ARec;
end;

procedure TForm1.OkCmdClick(Sender: TObject);
begin

  Save;

  SetConnected(true);
  RED1.lines.add('登录成功');
  RzBitBtn2Click(nil);
 

 
  Modalresult := mrOk;
end;

procedure TForm1.TrayIcoDblClick(Sender: TObject);
begin
  Show;
end;

procedure TForm1.N2Click(Sender: TObject);
begin
 Hide;
end;

procedure TForm1.N1Click(Sender: TObject);
begin
  show;
end;

procedure TForm1.N4Click(Sender: TObject);
begin
   Tag := 1;
  Close;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if (Tag = 0) and TrayIco.Active then
  begin
    Action := caNone;
    Hide;
    Exit;
  end;
  if not MsgBoxSel('确定要退出 '+ Caption +' 吗?') then
  begin
    Action := caNone;
    Tag := 0;
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  TrayIco.Active := false;
end;

procedure TForm1.RzBitBtn3Click(Sender: TObject);
begin
   Save;
   hide;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
 if Red1.Lines.Count > 0 then
  if MsgBoxSel('确定要清除所有记录吗?') then
    Red1.Clear;
end;

procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
 if REd1.SelText = '' then
    Exit;
  REd1.CopyToClipboard;
  MsgBoxInfo('已经复制到剪贴板!');
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
 if Red1.Lines.Count > 0 then
  if SaveDlg.Execute then
    Red1.Lines.SaveToFile(SaveDlg.FileName);
end;

procedure TForm1.SetConnected(AValue: boolean);
var Adoquery:tadoquery;
    procedure SetConnString(aServer, adb, aUser, aPass: string);
    begin
      ADOConnObject.Cancel;
      ADOConnObject.Connected := false;
      ADOConnObject.ConnectionString :=
      'Provider=SQLOLEDB.1;Persist Security Info=False;' +
      'User ID='+ aUser +';' +
      'Initial Catalog='+ adb +';' +
      'Data Source=' + aServer + ';' +
      'Password=' + aPass + ';' +
      'Use Procedure for Prepare=1;Auto Translate=True;' +
      'Packet Size=4096;Workstation ID=SYX;'+
      'Use Encryption for Data=False;'+
      'Tag with column collation when possible=False';
    end;

begin


    if AValue then
    begin
     SetConnString(edServer.Text , edtxDatabase.Text , edDbUser.Text , edDbPass.Text );
     ADOConnObject.Connected := AValue;


      if  ADOConnObject.Connected then
      loginin ;

    end
    else
    begin
       ADOConnObject.Connected := false;
     
    end;


  end;

//----------用户登陆--------------------------------------------

procedure TForm1.loginin;
var
    DllPaht: string; // DLL的地址
    rtn: Integer;
begin
     //判断是否登陆
    if (OneHandle <> 0) or (pRtnHandle <> 0) then begin
            RED1.Lines.Add(  '你已经登陆了!');
            exit;
        end;

    try
        DllPaht := ExtractFilePath(Paramstr(0)) + 'JL_ISP.dll'; //获得DLL的地址
        OneHandle := LoadLibrary(PChar(DllPaht)); //动态载入DLL,并返回其句柄
        if OneHandle <> 0 then {//如果载入成功则获取ShowCalendar函数的地址}  begin
                @JL_HttpLogin := GetProcAddress(OneHandle, 'JL_HTTPLogin');
                @JL_Logout := GetProcAddress(OneHandle, 'JL_Logout');
                @JL_ModifyPassword := GetProcAddress(OneHandle, 'JL_ModifyPassword');
                @JL_SendMsg := GetProcAddress(OneHandle, 'JL_SendMsg');
                @JL_GetAccountRegTime := GetProcAddress(OneHandle, 'JL_GetAccountRegTime');
                @JL_GetAccountDenyTime := GetProcAddress(OneHandle, 'JL_GetAccountDenyTime');
                @JL_GetAccountType := GetProcAddress(OneHandle, 'JL_GetAccountType');
                @JL_GetAccountPrice := GetProcAddress(OneHandle, 'JL_GetAccountPrice');
                @JL_GetAccountBalance := GetProcAddress(OneHandle, 'JL_GetAccountBalance');

⌨️ 快捷键说明

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