使用DLL的函數進行“來電顯示”二次開發 |
chen在2006/6/14發表,被瀏覽9870次
|
編程方式:delphi DLL接口函數的功能見“服務程序”一文。 建立窗體如下:
在ComboBox1的Items中添加如下: AddShareNo GetShareData ReadShareData CountShareData ReadLastNo OpenComport CloseComport GetComportState ChangeComPort ReadComPort OpenSocket CloseSocket GetSocketState ChangeSocketComPort ReadSocketPort StartJDService StopJDService Dial ReadDialNo ShowTeleServerState 程序代碼如下: unit cltTeleSS; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ScktComp; const ComTeleDll='cdTele.dll'; type TForm1 = class(TForm) Memo1: TMemo; Button3: TButton; ComboBox1: TComboBox; edFt: TEdit; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; //==============cdTele.dll提供的查詢和獲取來電號碼的函數============== //來電池是指監聽程序內的一個數組 [0..100],用來保存來電號碼和來電時間。//數組從0 //開始計數,把第1個來電號碼保存在第0個數據單元,把第2個來電號碼保存在第1個數據單 //元,如此類推。當取走來第1個來電號碼(第0個數據單元)后,自動把第2個號碼移位到 //第0個數據單元,如此類推。 //打開服務程序共享內存,如果使用DLL函數,建議在程序啟動時調用 function OpenMapFile: LongBool; stdcall; external ComTeleDll; //關閉服務程序共享內存,調用了OpenMapFile后,在程序結束時調用 function CloseMapFile: LongBool; stdcall; external ComTeleDll; //測試使用,把來電號碼和時間寫入監聽程序內的來電池中 function AddShareData(No: PChar; T: TDateTime): Integer; stdcall; external ComTeleDll; //獲取來電號碼和來電時間。如果有來電,則返回True,否則返回False。獲取來電后,刪除來電池中的該來電號碼。 //i:獲取來電池中的第i個來電號碼,從0開始計數,0為最先來電; //No:獲取的來電號碼; //T:獲取的來電時間。 function GetShareData(const i: Integer; var No: PChar; var T: TDateTime): LongBool; stdcall; external ComTeleDll; //獲取來電號碼和來電時間。如果有來電,則返回True,否則返回False。獲取來電后,不刪除來電池中的該來電號碼。 function ReadShareData(const i: Integer; var No: PChar; var T: TDateTime): LongBool; stdcall; external ComTeleDll; //獲取最新來電號碼和來電時間。 function ReadLastData(var No: PChar; var T: TDateTime): LongBool; stdcall; external ComTeleDll; //測試使用,把來電號碼寫入來電池 function AddShareNo(No: PChar): Integer; stdcall; external ComTeleDll; //直接獲取來電池中的第i個來電號碼。獲取來電后,刪除來電池中的該來電號碼。 function GetShareNo(const i: Integer): PChar; stdcall; external ComTeleDll; //直接獲取來電池中的第i個來電號碼。獲取來電后,不刪除來電池中的該來電號碼。 function ReadShareNo(const i: Integer): PChar; stdcall; external ComTeleDll; //返回最新來電號碼。 function ReadLastNo: PChar; stdcall; external ComTeleDll; //直接刪除來電池中的第i個來電號碼。 function DelShareData(const i: Integer): LongBool; stdcall; external ComTeleDll; //直接刪除來電池中的所有來電號碼。 function ClearShareData: LongBool; stdcall; external ComTeleDll; //返回來電池中有幾個來電號碼。 function CountShareData: Integer; stdcall; external ComTeleDll; //返回來電管理器的COM端口打開與否 function GetComportState: LongBool; stdcall; external ComTeleDll; //返回連接來電管理器的COM端口號。1表示COM1,2表示COM2,如此類推 function ReadComPort: Byte; stdcall; external ComTeleDll; //返回服務程序是否已經打開Socket服務 function GetSocketState: LongBool; stdcall; external ComTeleDll; //返回監聽服務程序的Socket服務端口號 function ReadSocketPort: Integer; stdcall; external ComTeleDll; //====以下函數適用于TeleListen.exe,如果使用svrTele.exe,則響應速度會慢一些==== //打開來電管理器的COM端口,返回COM端口狀態 function OpenComPort: LongBool; stdcall; external ComTeleDll; //關閉來電管理器的COM端口,返回COM端口狀態 function CloseComPort: LongBool; stdcall; external ComTeleDll; //修改來電管理器的COM端口,并返回打開狀態。1表示COM1,2表示COM2,如此類推 function ChangeComPort(const Port: Byte): LongBool; stdcall; external ComTeleDll; //打開TeleListen.exe的Socket服務,返回Socket服務狀態 function OpenSocket: LongBool; stdcall; external ComTeleDll; //關閉TeleListen.exe的Socket服務,返回Socket服務狀態 function CloseSocket: LongBool; stdcall; external ComTeleDll; //修改TeleListen.exe的Socket服務端口,并返回打開狀態 function ChangeSocketPort(const Port: Integer): LongBool; stdcall; external ComTeleDll; //返回TeleLC.exe中的連接服務器地址 function ReadSocketAddress: PChar; stdcall; external ComTeleDll; //回撥電話,如果NO為空,則重撥 function DialTeleNo(No: PChar): LongBool; stdcall; external ComTeleDll; //返回上次撥出電話 function ReadDialNo: PChar; stdcall; external ComTeleDll; //設置監聽服務程序的運行狀態 function ShowTeleServerState: Integer; stdcall; external ComTeleDll; //====以下函數適用于svrTele.exe,當啟動客戶端程序失敗時,要StopJDService,然后再StartJDService==== //啟動svrTele.exe服務,如果啟動成功,返回True function StartJDService: LongBool; stdcall; external ComTeleDll; //停止svrTele.exe服務,如果關閉成功,返回True function StopJDService: LongBool; stdcall; external ComTeleDll; //====以下函數適用于TeleLC.exe==== //修改TeleLC.exe的連接服務器地址 function ChangeSocketAddress(addr: PChar): LongBool; stdcall; external ComTeleDll; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin try OpenMapFile; except //打開不成功,一般都是由于svrTele.exe作為服務程序,Tele Server已經啟動造成的 //解決的辦法是先停止服務,打開MapFile,再啟動服務 StopJDService; OpenMapFile; StartJDService; end; end; procedure TForm1.FormDestroy(Sender: TObject); begin CloseMapFile; end; procedure TForm1.Button3Click(Sender: TObject); procedure GetData(get: Boolean); var no: PChar; t: TDateTime; i: Integer; begin no:=StrAlloc(20); if edFt.Text='' then i:=0 else i:=StrToIntDef(edFt.Text,0); if get then begin if GetShareData(i, no, t) then Memo1.Lines.Add(StrPas(no)+FormatDateTime(' yyyy-mm-dd hh:nn:ss', t)); end else if ReadShareData(i, no, t) then Memo1.Lines.Add(StrPas(no)+FormatDateTime(' yyyy-mm-dd hh:nn:ss', t)); StrDispose(no); end; procedure WriteState(connected: Boolean); begin if connected then Memo1.Lines.Add('Connected!') else Memo1.Lines.Add('not Connected!'); end; procedure WriteState1(active: Boolean); begin if active then Memo1.Lines.Add('Active!') else Memo1.Lines.Add('not Active!'); end; begin case ComboBox1.ItemIndex of 0: AddShareNo(PChar(edFt.Text)); 1: GetData(True); 2: GetData(False); 3: Memo1.Lines.Add('Tele Count '+IntToStr(CountShareData)); 4: Memo1.Lines.Add(StrPas(ReadLastNo)); 5: WriteState(OpenComport); 6: WriteState(CloseComport); 7: WriteState(GetComportState); 8: WriteState(ChangeComport(StrToIntDef(edFt.Text,0))); 9: Memo1.Lines.Add('COM'+IntToStr(ReadComport)); 10: WriteState1(OpenSocket); 11: WriteState1(CloseSocket); 12: WriteState1(GetSocketState); 13: WriteState1(ChangeSocketPort(StrToIntDef(edFt.Text,3825))); 14: Memo1.Lines.Add('Socket Port is '+IntToStr(ReadSocketPort)); 15: if StartJDService then Memo1.Lines.Add('Start Tele Server'); 16: if StopJDService then Memo1.Lines.Add('Stop Tele Server'); 17: if DialTeleNo(PChar(edFt.Text)) then Memo1.Lines.Add('Dial '+edFt.Text); 18: Memo1.Lines.Add('Last Dial No is '+StrPas(ReadDialNo)); 19: if ShowTeleServerState=mrOK then Memo1.Lines.Add('Set Server State Successful'); end; end; end.
|
|
|
|