广州高深商电子技术有限公司 用户登录
用户注册 ......
首页 公告 收款机 抽奖机 来电管理 数据采集 台球灯控 软件开发 综合 会员下载 发货查询
公司首页
当前位置:首页>> 来电管理>> 二次开发 >>正文
使用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.
【相关文章】
使用DLL的函数进行“来电…
【同类文章】
高深商GSM无线固话盒OC…
WIFI接口来电显示管理器…
新一代USB转COM口来电…
来电管理器故障排除的方法
在WIN7或Win8中注册…
计算机收发短信的OCX控件…
使用Java开发来电显示管…
开发来电显示及录音程序的C…
C#来电显示管理器开发示例…
使用C#的Socket开发…

广州高深商电子技术有限公司

地址:天河北路908号、高科大厦B座2704
电话:020-38259081、38258857
电子邮箱:gaoykosen@foxmail.com