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

📄 csmscontrol.pas

📁 用于delphi开发受机短信处理
💻 PAS
字号:
{///////////////////////////////////////////////////////////////////////////////
Project   Dcu2Pas Version 1.3
Purpose   Decompile a D2-D7, K1-K3's dcu(dpu) file to Delphi source as origin as
          possible, without or with minimal modifications, then recompile to new
          one under other Delphi versions
Author    Nengwen Zhuo(卓能文)
Homes     http://soarowl.uhome.net, http://www.websamba.com/soarowl,
          http://soarowl.0catch.com
Emails    soarowl@yeah.net, soarowl@sina.com.cn
Released  2003-02-10
Lastest   home/dl/Dcu2Pas.rar

          FOR RESTORE YOUR LOST SOURCES AND OPTIMIZE YOUR CODES ONLY!!!

          Decompiled on 2005-2-4 8:55:45
///////////////////////////////////////////////////////////////////////////////}

unit CSMSControl;

interface

uses
  Contnrs,
  ExtCtrls,
  SPComm,
  Dialogs,
  Forms,
  Controls,
  Graphics,
  Classes,
  Messages,
  Windows,
  SysUtils;

type
  TPDUFormatRec = packed record
    CenterLen: packed array [0..1] of Char;
    CenterType: packed array [0..1] of Char;
    CenterNumber: packed array [0..13] of Char;
    FileHeader: packed array [0..1] of Char;
    SMType: packed array [0..1] of Char;
    CalledLen: packed array [0..1] of Char;
    CalledType: packed array [0..1] of Char;
    CalledNumber: packed array [0..11] of Char;
    SMCodeType: packed array [0..5] of Char;
    SMLen: packed array [0..1] of Char;
  end;

  TPDUSendRec = packed record
    SMSCLength: packed array [0..1] of Char;
    FirstOctet: packed array [0..1] of Char;
    MessageReference: packed array [0..1] of Char;
    PhoneLength: packed array [0..1] of Char;
    AddressType: packed array [0..1] of Char;
    Phone: packed array [0..11] of Char;
    TPPID: packed array [0..1] of Char;
    TPDCS: packed array [0..1] of Char;
    TPValidityPeriod: packed array [0..1] of Char;
    TPUserDataLength: packed array [0..1] of Char;
  end;

  TPDUFirstReadRec = packed record
    SMSCLength: packed array [0..1] of Char;
    AddressType: packed array [0..1] of Char;
    ServiceCenterNumber: packed array [0..13] of Char;
    FirstOctet: packed array [0..1] of Char;
    SendPhoneLength: packed array [0..1] of Char;
    SendPhoneType: packed array [0..1] of Char;
  end;

  TPDUSecondReadRec = packed record
    TPPID: packed array [0..1] of Char;
    TPDCS: packed array [0..1] of Char;
    TimeStamp: packed array [0..13] of Char;
    TPUserDataLength: packed array [0..1] of Char;
  end;

  TSMSSendOKEvent = procedure(ID: Integer) of object;

  TSMSReceiveDataEvent = procedure(Sender: TObject; Buffer: Pointer; BufferLength: Word) of object;

  TSMSNewMsgEvent = procedure(PhoneNO: String; Msg: String; MsgTime: String) of object;

  TSMSControl = class(TComm)
  private
    FAutoDeleteMsg: Boolean;
    FCheckATTimer: TTimer;
    FCommandType: Integer;
    FExecuteATOK: Boolean;
    FLastMsg: String;
    FOnSMSNewMsgEvent: TSMSNewMsgEvent;
    FOnSMSReceiveDataEvent: TSMSReceiveDataEvent;
    FOnSMSSendOKEvent: TSMSSendOKEvent;
    FSMSCenterNO: String;
    FSMSCommandQueue: TObjectQueue;
    FSMSQueue: TObjectQueue;
    FSMSSendState: Boolean;
    function ChangeOrder(OriStr: String; TotalLen: Integer): String;
    function Decode8Bits(s: String): String;
    function DecodeEnglish(s: String): String;
    function DecodeUniCode(s: String): WideString;
    function DeleteSMS(ID: Integer): Boolean;
    function DisposeReadPDU(PDUData: String; var Phone: String; var MsgContent: String): Integer;
    function Encode8Bits(s: String): String;
    function EncodeEnglish(s: String): String;
    function EncodeUniCode(s: WideString): String;
    function GetMSG(ReceiveMSG: String; var PhoneNO: String; var MsgContent: String; var MSGDateTime: String): Integer;
    function GetPDUData(SMSC: String; DATel: String; SDU: String; var len: String): String;
    function GetString(strSource: String; strStart: String; strEnd: String): String;
    function HexToInt(HexStr: String): Integer;
    function Mix2PDU(CenterNumber: String; CalledNumber: String; ShortMsg: String): String;
    function MixSendPDU(Phone: String; ShortMsg: String; var SendLen: String; SMType: Integer): String;
    function MyDisposeReadPDU(PDUData: String; var Phone: String; var MsgContent: String; var MSGTime: String): Integer;
    function PDUFmtStr(Val: String): String;
    function PDUSMSC(Tel: String; var TelLen: Byte): String;
    function PDUTel(Tel: String; var TelLen: Byte): String;
    procedure ProcessNewSMSMsg(PhoneNO: String; Msg: String; MsgTime: String);
    procedure ProcessReceiveData(strReceiveData: String);
    function ReadSMS(ID: Integer): Boolean;
    function ResumeOrder(OriStr: String): String;
    function SMSNewMsgEvent(PhoneNO: String; Msg: String; MsgTime: String): TSMSNewMsgEvent;
    procedure SMSReceiveDataEvent(Sender: TObject; Buffer: Pointer; BufferLength: Word);
    procedure SMSSendOKEvent(ID: Integer);
  protected
    procedure ProcCheckATTimer(Sender: TObject);
    procedure ProcCommSMSReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word);
  public
    constructor Create(AOwner: TComponent); overload;
    destructor Destroy;
    function GetCommandQueueCount: Integer;
    function GetSendQueueCount: Integer;
    procedure InitSMS(CenterNO: String);
    procedure PushCommand(AT: String; ATType: Integer);
    procedure PushSMS(SMSID: Integer; SMSPhoneNO: String; SMSMsg: String; SMSSendTime: TDateTime);
    function SendSMS(PhoneNO: String; Msg: String): Integer;
    procedure SetOpenProcess(Value: Boolean);
    procedure WriteCommDataAT(AT: String);
  published
    property AutoDeleteMsg: Boolean read FAutoDeleteMsg write FAutoDeleteMsg;
    property LastMsg: String read FLastMsg write FLastMsg;
    property OnSMSNewMsgEvent: TSMSNewMsgEvent read FOnSMSNewMsgEvent write FOnSMSNewMsgEvent;
    property OnSMSReceiveDataEvent: TSMSReceiveDataEvent read FOnSMSReceiveDataEvent write FOnSMSReceiveDataEvent;
    property OnSMSSendOKEvent: TSMSSendOKEvent read FOnSMSSendOKEvent write FOnSMSSendOKEvent;
    property SMSCenterNO: String read FSMSCenterNO write FSMSCenterNO;
  end;

  TSMSQueue = class(TObject)
  private
    Content: String;
    ID: Integer;
    InTime: TDateTime;
    PhoneNO: String;
    SendTime: TDateTime;
  end;

  TSMSCommandQueue = class(TObject)
  private
    ATCommand: String;
    CommandType: Integer;
  end;

procedure Register;

implementation

constructor TSMSControl.Create(AOwner: TComponent);
begin
  inherited Create( AOwner );
  FCheckATTimer.Interval  :=     $64;
  FCheckATTimer.OnTimer :=  ProcCheckATTimer;
  FCheckATTimer.Enabled := TRUE;

  {
asm
  @@0:        {stack frame start
  @@3:        push    ecx
  @@4:        push    ebx
  @@5:        push    esi
  @@6:        {constructor start
  @@18:       mov     [ebp-$01], dl
  @@21:       mov     ebx, eax
  @@23:       xor     edx, edx
  @@25:       mov     eax, ebx
  @@27:       call    TComm.Create
  @@32:       mov     [ebx+$0084], ebx
  @@38:       mov     dword ptr [ebx+$0080], offset TSMSControl.ProcCommSMSReceiveData
  @@48:       mov     byte ptr [ebx+$00A8], $00
  @@55:       lea     eax, [ebx+$00D8]
  @@61:       mov     edx, offset @@232
  @@66:       call    System.@LStrAsg
  @@71:       mov     byte ptr [ebx+$00B4], $01
  @@78:       xor     eax, eax
  @@80:       mov     [ebx+$00B0], eax
  @@86:       mov     byte ptr [ebx+$00E4], $00
  @@93:       mov     ecx, ebx
  @@95:       mov     dl, $01
  @@97:       mov     eax, dword ptr _DOT_TTimer
  @@102:      call    TTimer.Create
  @@107:      mov     esi, eax
  @@109:      mov     [ebx+$00AC], esi
  @@115:      mov     eax, esi
  @@117:      mov     edx, $00000064
  @@122:      call    TTimer.SetInterval
  @@127:      push    ebx
  @@128:      push    offset TSMSControl.ProcCheckATTimer
  @@133:      mov     eax, [ebx+$00AC]
  @@139:      call    TTimer.SetOnTimer
  @@144:      mov     eax, [ebx+$00AC]
  @@150:      xor     edx, edx
  @@152:      call    TTimer.SetEnabled
  @@157:      mov     dl, $01
  @@159:      mov     eax, dword ptr _DOT_TObjectQueue
  @@164:      call    TOrderedList.Create
  @@169:      mov     [ebx+$00E0], eax
  @@175:      mov     dl, $01
  @@177:      mov     eax, dword ptr _DOT_TObjectQueue
  @@182:      call    TOrderedList.Create
  @@187:      mov     [ebx+$00DC], eax
  @@193:      mov     eax, ebx
  @@195:      {constructor end
  @@216:      mov     eax, ebx
  @@218:      pop     esi
  @@219:      pop     ebx
  @@220:      pop     ecx
  @@221:      {stack frame end

  @@223:      
  {
           0: 00 FF FF FF FF 0D 00 00 00 38 36 31 33 30 31 30      .

⌨️ 快捷键说明

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