📄 csmscontrol.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 + -