計算機收發短信的OCX控件二次開發說明 |
chen在2011/4/13發表,被瀏覽4516次
|
下載地址:JDCellPhoneXC.ocx 控件是標準的ActiveX控件,適用于Windows平臺下的所有開發編程工具,例如Delphi、VB、C#、C++、Java、PB等。控件封裝了標準AT指令、手機與計算機的通信內容,提供了發送短信、接收短信、撥打電話、接聽電話等函數和事件,非常方便二次開發。 控件需要的硬件設備是高深商公司研發的“手機盒”(見下面的名詞解析)或能與計算機連接的手機(要求手機通過COM口通信)。 名詞解析: 超長短信 --- 當短信超過68個字時,就是超長短信。手機自動把超長短信分成幾條短信發送,接收時也分多條短信形式存儲在SIM卡中,在讀短信時,臨時組裝成超長短信。 手機盒 --- 與計算機連接的設備,插入SIM卡才能使用。該設備尺寸為100mm×58mm×24.5mm(長×寬×高,其中天線21mm),有一個標準的USB接口,通過標準的USB連接線,連接計算機。該設備不用電池,啟動計算機后,就會自動開啟。利用此設備,可以把計算機當成手機使用,在電腦上收發短信,撥打電話。一臺計算機可以連接多個設備,并通過參數devid區分不同的手機盒。有關手機盒的更多詳細信息,請撥打電話020-38259081咨詢。 主要屬性: BaudRate --- 與計算機連接的波特率,最好不要人工設置,而是采用設置函數SetupPort自動查找。 Port --- 與計算機連接的端口,同上不要人工設置。 JDConnected --- 與計算機是否已連接,即是否已經打開端口,布爾型。 QueryATSeconds --- 當執行AT查詢指令時,最長等待反應時間,默認2秒,整數。 ReadLongSmsSeconds --- 讀超長短信時,最長的延時時間,默認30秒,整數。 ReadSmsSeconds --- 讀普通短信時,最長的延時時間,默認5秒,整數。 ReadLongSmsWay --- 讀短信函數ReadSms的工作方式(針對超長短信),有0、1、2數值可選擇: 0 一般用于收到短信事件OnSms中;在讀超長短信時,只有當id為最后一條短信id,才完整地讀超長短信; 1 常用的讀短信方式;當遇到超長短信時,首先計算此超長短信第一條id,按順序讀,當不成功時,讀所有短信; 2 只要是超長短信,首先把SIM卡內的所有短信都讀出來,拼接成此條超長短信; 建議在OnSms事件中調用ReadSms時,ReadLongSmsWay設為0,其它時候設為1。 ReturnCompleteLongSms --- 布爾型,默認False;如果設為True,ReadSms讀短信,當遇到超長短信時,只有當超長短信讀完整,才返回短信內容,讀超長短信異常,例如超長短信還沒有完整接收時,就執行ReadSms,導致超長短信不能讀完整,則ReadSms返回0。 ShowRxChar --- 布爾型,默認False;如果設為True,顯示手機盒與計算機通訊的內容,方便調試。 ShowTip --- 布爾型,默認True,表示當執行ReadSMS、ReadAllSms、QueryAT等函數時,提示手機盒正在與計算機通訊。 ExecJDSmsEvent --- 布爾型,默認True,表示收到短信時自動執行OnJDSms事件;當為False時,不觸發OnJDSms,即不執行OnJDSms。 OnlyCheckUSBtoSerialComport --- 布爾型,默認True,表示在查找端口時只找USB轉COM的端口。 主要事件: OnAfterOpen ---- 打開連接端口時觸發。 函數原型:procedure AfterOpenEvent(Sender: TObject); OnAfterClose ---- 關閉連接端口時觸發。 函數原型:procedure AfterCloseEvent(Sender: TObject); OnRing --- 當有電話呼入時,手機響鈴,觸發此事件;有3個傳遞參數值: no為來電號碼,字符串; index是本次來電的響鈴次數,其值為1,2...; devid是手機盒連接標識號,整數,其值為0,1,2... 函數原型:RingEvent(Sender: TObject; no: String; index, devid: Smallint); OnEndRing --- 對方掛斷手機,響鈴結束,觸發此事件;有1個傳遞參數值: devid是手機盒標識號,其值為0,1,2... 函數原型:EndRingEvent(Sender: TObject; devid: Smallint); OnNoCarrier --- 撥號失敗、連接不成功等均觸發此事件;有2個傳遞參數值: str為失敗原因: NO CARRIER、NO ANSWER、BUSY; devid是手機盒標識號。 函數原型:NoCarrierEvent(Sender: TObject; str: String; devid: Smallint); OnJDSms --- 手機盒接收到短信,并完整讀取短信時,觸發此事件;事件在ExecJDSmsEvent=True時有效;有5個傳遞參數值: id為短信標識號,可根據此id刪除SIM卡內的短信; no為發送短信號碼; t為接收短信時間; s為短信內容; devid是手機盒標識號。 函數原型:JDSmsEvent(Sender: TObject; id, no, t, s: String; devid: Smallint); OnSms --- 手機盒接收到短信時,觸發此事件;有2個傳遞參數值: id為短信標識號,可根據id值讀短信; devid是手機盒連接序號; 函數原型:SmsEvent(Sender: TObject; id: String; devid: Smallint); 與OnJDSms事件的不同點: OnSms不讀短信,只要接收到短信,就觸發此事件; OnJDSms在接收到短信時,馬上讀取短信,并判斷短信是完整的,才觸發此事件; 推薦使用OnJDSms。 主要函數: SetupPort --- 設置手機盒與計算機連接的端口,可以自動查找端口,一般在第一次使用時調用;成功時保存連接參數,并返回True;有1個參數: ShowForm 是否顯示查找端口,True表示顯示查找端口界面,False表示不顯示查找端口界面。 函數原型:function SetupPort(ShowForm: WordBool): WordBool; Open --- 打開連接,JDConnected設為True。 函數原型:procedure Open; Close --- 關閉連接,JDConnected設為False。 函數原型:procedure Close; InitSIM300 --- 對手機盒初始化,一般在第一次使用時調用,返回設置手機盒的參數。 函數原型:function InitSIM300: WideString; LoadComportParam --- 在程序啟動時調用,讀取手機盒與計算機的連接參數;這些參數是在 SetupPort時保存的。 函數原型:procedure LoadComportParam; GetComportCount --- 返回手機盒與計算機的連接數量。 函數原型:function GetComportCount: Smallint; ReadSms --- 讀短信函數,返回短信數量;有5個參數: id 短信標識號,函數按id讀短信;當是超長短信時,id返回超長短信的第一條短信id; no 發送短信號碼,返回值; t 短信接收時間,返回值; msg 短信內容,返回值; devid 手機盒標識號,表示從哪個手機盒讀短信;當只有一個手機盒與計算機連接時,賦0。 函數原型:ReadSms(var id, no, t, msg: WideString; devid: Smallint): Smallint; ReadAllSms --- 讀取所有短信函數,返回短信數量;有2個參數: memo 所有短信內容,返回值; devid 手機盒標識號,表示從哪個手機盒讀短信。 函數原型:ReadAllSms(var memo: WideString; devid: Smallint): Smallint; SendSms --- 發送短信函數,返回成功發送短信的號碼;有3個參數: nos 要發送的手機號碼,可群發,號碼之間用;或空格分隔; msg 要發送的短信內容; devid 手機盒標識號,表示用哪個手機盒發短信。 函數原型:function SendSms(const nos, msg: WideString; devid: Smallint): WideString; DeleteSms --- 刪除短信的函數;有2個參數: id 短信標識號,函數按id刪除短信; devid 手機盒標識號,表示刪除哪個手機盒的短信。 函數原型:DeleteSms(const id: WideString; devid: Smallint): WordBool; QueryAT --- 向手機盒發送AT指令,返回手機盒響應內容,主要用于測試;有3個參數: cmd --- AT指令; mlines --- 返回內容是否有多行; devid 手機盒標識號,表示向哪個手機盒發AT指令。 函數原型:QueryAT(const cmd: WideString; mlines: WordBool; devid: Smallint): WideString; SIM300Setup --- 設置手機盒音量等參數,成功返回True;有1個參數: devid 手機盒標識號,表示設置哪個手機盒的參數。 函數原型:SIM300Setup(devid: Smallint): WordBool; DoDial --- 撥號函數,成功返回True,失敗可用GetEroroCode查詢原因;有2個參數: no 撥出號碼; devid 手機盒標識號,表示用哪個手機盒撥號。 函數原型:DoDial(const no: WideString; devid: Smallint): WordBool; DoAnswer --- 接聽電話函數,摘機,有1個參數: devid 手機盒標識號,表示接聽哪個手機盒電話。 函數原型:DoAnswer(devid: Smallint): WordBool; DoHold --- 掛斷電話函數,掛機,有1個參數: devid 手機盒標識號,表示掛斷哪個手機盒電話。 函數原型:DoHold(devid: Smallint): WordBool; AllowSendDTMF --- 檢查是否處于通話中,返回True,表示在通話中,可以發送應答撥號音;有1個devid參數。 函數原型:function AllowSendDTMF(devid: Smallint): WordBool; SendDTMF --- 在通話過程中,按語音提示輸入應答內容,例如提示選擇數、密碼、賬號等;有2個參數: str 應答的字符串,按語音提示格式輸入;只能使用字符:'0'..'9', '*', '#', 'A'..'D'; devid 手機盒標識號。 函數原型:SendDTMF(const str: WideString; devid: Smallint): WordBool; getCNUM --- 返回本機號碼,當為空時,表示未設置本機號碼;有1個devid參數。 函數原型:function getCNUM(devid: Smallint): WideString; setThisPhoneNo --- 設置本機號碼,成功時返回True;有2個參數: no 要設置的本機號碼,當為空時,表示清除本機號碼; devid 手機盒標識號。 函數原型:setThisPhoneNo(const no: WideString; devid: Smallint): WordBool; getCSQValue --- 返回手機信號強度,整數值,0表示無信號,31表示信號最強,-1表示不能獲取信號強度;有1個devid參數。 函數原型:function getCSQValue(devid: Smallint): SYSINT; ShowWaiting --- 顯示提示窗口,有3個參數: Caption 窗口標題; Tip 提示內容; MilliSeconds 提示窗口顯示時間長度,單位毫秒,到時自動關閉;或調用CloseWaiting提前關閉。 函數原型:ShowWaiting(const Caption, Tip: WideString; MilliSeconds: Integer); CloseWaiting --- 強行關閉提示窗口。 函數原型:procedure CloseWaiting; AboutBox --- 顯示OCX控件版本。 函數原型:procedure AboutBox; ReadSimBooks --- 按索引號(存放位置)讀取SIM卡中的電話號碼和姓名,成功時返回True;有4個參數: index 電話號碼在SIM卡中的存放位置,即索引號; no 電話號碼,返回值; name 姓名,返回值; devid 手機盒標識號。 函數原型:ReadSimBooks(index: Smallint; var no, name: WideString; devid: Smallint): WordBool; ReadSimBooksAll --- 返回SIM卡中的所有電話號碼,1行1個號碼,即號碼之間分隔符為回車和換行符;有1個devid參數;返回的內容可調用ExtractSimBooks提取電話號碼和姓名。 函數原型:function ReadSimBooksAll(devid: Smallint): WideString; ExtractSimBooks --- 從返回的字符串中按行提取電話號碼和姓名,提取成功時返回True;有4個參數: str 要分析的字符串,即ReadSimBooksAll返回的其中1行內容; index 電話號碼在SIM卡中的存放位置(索引號),返回值; no 電話號碼,返回值; name 姓名,返回值; 函數原型:ExtractSimBooks(const str: WideString; var index, no, name: WideString): WordBool; AddSimBooks --- 向SIM卡中添加電話號碼,成功時返回True;有4個參數: no 電話號碼; name 姓名; index 在SIM卡中的存放位置(索引號),一般采用0,即自動按順序存放; devid 手機盒標識號。 函數原型:AddSimBooks(const no, name: WideString; index, devid: Smallint): WordBool; DeleteSimBooks --- 刪除SIM卡中的電話號碼,成功時返回True;有2個參數: index 要刪除的號碼在SIM卡中的存放位置(索引號); devid 手機盒標識號。 函數原型:function DeleteSimBooks(index, devid: Smallint): WordBool; 開發要點: (1)在程序啟動時,調用LoadComportParam函數。 (2)在第一次使用程序時,請調用SetupPort函數,設置與計算機連接的參數;成功設置后,請調用InitSIM300初始化手機盒模塊。 (3)程序啟動后,請調用Open函數打開連接;如果在程序設計時,JDConnected=True,則此步驟忽略。 (4)調用DoAnswer、DoHold、DoDial函數,實現撥打、接聽電話。 (5)在OnRing、OnEndRing、OnNoCarrier事件中編寫處理代碼,可實現來電顯示。 (6)在OnJDSms中編寫處理代碼,可自動接收短信。 (7)調用SendSms函數,可發送短信。 (8)調用ReadSms、ReadAllSms、DeleteSms函數,可讀取、刪除SIM卡內的短信。
|
|
|
|