使用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.
|
|
|
|