编写TAPI应用程序

06_openwRT Voice之TAPI与VoIP的应用编程 驱动环境VOICE-TAPI-VoIP说明 Version :0.1 简 介 本文档涉及驱动底层LL,也只是对驱动上层HL的应用分析,对于电话应用编程接口(TAPI)和VoIP进行详细的介绍,是对上层的理解和给应用程序进行调用的接口。篇一详细的介绍了TAPI的上层需要的功能获得接口,篇二... 阅读详情

TAPI(Telphony Application Programming Interface)可以称作电话编程接口,它是微软提供的计算机和电话网相联系的编程接口,使程序员可以利用这个接口通过电话线使用多种计算机复杂的通讯工作。TAPI能提供的功能主要有:自动拨号;以文件、传真、电子邮件的方式传送文件;访问Internet或其他形式信息服务、组织会议呼叫、使用主叫识别处理入呼叫、计算机间通过电话线的互相协作。这里提到的有的功能很早就已经广泛应用了,还有一些由于我国交换设备不提供此类功能很少问津。这里笔者不想对TAPI能实现什么功能多加讨论,只就编程谈一点体会。

  促使笔者利用TAPI编写程序主要是由于工作中经常需要发传真,而每个传真都需要确认,如果电话是功能最少的那种,每次都要花大量的时间在上面。如果确认时再没人应答,之后再来一次,效率就更低了。因此,笔者想到利用TAPI编写一个程序能用MODEM自动拨号,通话结束后记录一下内容,省了每次辛苦地看着号码拨号。下面将程序与读者共享。

  笔者利用delphi作为开发工具,原因主要是delphi开发程序方便快捷,同时数据库的使用比较简单。使用过Visual C++的朋友都知道它的帮助是十分详细的,笔者开发的许多程序都参考了其中的WIN32 SDK帮助,尤其是在编写TAPI程序时,仔细地研究了其中的TAPI部分。使用VC编写TAPI程序可以利用现成的“tapi.h”头文件,但使用delphi就需要将C++版本的头文件翻译成Object Pascal的格式,再将“tapi32.dll”中的函数引用到头文件中来。幸好这项工作不用我们去做,从Inprise公司的站点可以获得delphi 关于TAPI编程的头文件,省了不少事,笔者的头文件tapi.pas是Davide Moretti编写的,如果需要的朋友可以通过报社和笔者联系。

  首先介绍程序中用到的几个函数:lineInitialize、lineNegotiateAPIVersion、lineOpen、lineMakeCall、lineHandOff、lineShutDown、lineConfigDialog、lineCallBackProc、lineGetIcon。函数的使用过程依次是:lineInitialize初始呗贰ineNegotiateAPIVersion确定TAPI版本号、lineOpen 打开线路、lineConfigDialog显示线路设备属性、lineMakeCall自动拨出电话号码、

lineGetIcon获得线路设备图标的句柄、lineHandOff将MODEM控制线路权转到用户、lineShutDown关闭线路。这里所用的函数名和tapi32.dll中输出的函数名相同。

  由于delphi和VC中类型定义的区别,笔者有必要举例说明函数定义在VC和delphi中的区别。以lineInitialize为例,在VC中定义为

LONG lineInitialize(LPHLINEAPP lphLineApp,HINSTANCE hInstance,LINECALLBACK lpfnCallback,LPCSTR lpszAppName,LPDWORD lpdwNumDevs)。lphLineApp是线路TAPI应用的句柄指针,hInstance是实例指针,lpfnCallback指向呼叫返回处理函数,lpszAppName指向用户提供的应用程序名字符串,lpdwNumDevs指向可供使用的线路设备个数。在delphi文件tapi.pas中对此函数的定义如下:

  function lineInitialize(var lphLineApp: THLineApp;hInstance: HInst;

lpfnCallback: TLineCallback;

  lpszAppName: PChar;var lpdwNumDevs: Longint): Longint;

  其中我们定义THLineApp、TLineCallback为指向Longint的指针(&LongInt)。其他函数的定义类推,分别用delphi中的相应类型代替,如果是长指针如句柄指针可以用“&LongInt”来定义。

  下面介绍程序的代码部分,在此笔者假定读者具备delphi数据库和一般编程基础。首先用Database Desktop建立两个Paradox7表,分别为“workphone.db”和“friendphone.db”。在主form上放置TTable、TDataSource、TDBGrid、TPopupMenu控件。程序定义sAppDir:string保存应用程序所在目录,设置sAppDir:=GetCurrentDir。在弹出式菜单中定义两个过程分别在TDBGrid中载入两个数据库表。

  procedure TMainForm.friendphoneClick(Sender: TObject);

  begin

  MainForm.Table1.Active:=False;

  MainForm.Table1.TableName:=sAppDir+‘friendphone.db’;

  MainForm.Caption:=‘自动拨号——朋友电话’;

  MainForm.Table1.Active:=True;

  end;

  

  procedure TMainForm.selectclassmateClick(Sender: TObject);

  begin

  MainForm.Table1.Active:=False;

  MainForm.Table1.TableName:=sAppDir+‘workphone.db’;

  MainForm.Caption:=‘自动拨号——工作电话’;

  MainForm.Table1.Active:=True;

  end;

  将TDBGrid的Options属性中的dgEditing设为True,允许用户直接修改表中的内容。在弹出菜单中定义DialPhone和DeleteRecord分别用于拨打电话号码和删除当前记录。下面主要介绍拨打电话的TAPI应用部分。电话号码是通过 MainForm.Table1.Fields.Fields[0].AsString作为字符串来传递的。

  实现的代码部分如下,其中为了文章不会太长笔者省去了不必要的错误提示和部分代码。

  变量定义

   lineApp:THLineApp;//TAPI应用句柄

   line:THLine;//线路句柄

   call:THCall;//呼叫句柄

   CallParams:TLineCallParams;//呼叫参数

   nDevs,tapiVersion,errorcode:Longint;//线路设备数、TAPI版本号、错误代码

   extid:TLineExtensionID;//TAPI扩展版本号

   lineIcon:HICON;//线路设备图标

   过程定义

   procedure lineCallback(hDevice, dwMsg, dwCallbackInstance,

   dwParam1, dwParam2, dwParam3: LongInt);//异步呼叫返回处理函数

  {$IFDEF WIN32}

   stdcall;

  {$ELSE}

   export;

  {$ENDIF}

   var

   hCall: THCall;

   begin

   if dwMsg = LINE_REPLY then { LineMakeCall的响应结果}

   if dwParam2 < 0 then {呼叫响应错误处理};

   else if dwMsg = LINE_CALLSTATE then { 呼叫状态信息 }

   begin

   hCall := THCall(hDevice); //类型转换 THCall为LongInt类型

   case dwParam1 of

   LINECALLSTATE_IDLE: {呼叫无效处理}

   if hcall <> 0 then

   begin

   lineDeallocateCall(hCall);

   end;

  LINECALLSTATE_PROCEEDING:{呼叫正常处理}

  LINECALLSTATE_DIALTONE:{检测到拨号音}

   LINECALLSTATE_DIALING: {正在拨号}

  LINECALLSTATE_DISCONNECTED:{连接已断开}

   begin{断开原因}

  if dwParam2=LINEDISCONNECTMODE_NORMAL then{正常断开}

  else if dwParam2=LINEDISCONNECTMODE_BUSY then {线路忙}

   LINECALLSTATE_BUSY:{线路忙处理}

   end;

   end;

  procedure TDialForm.(dialnumber:string);//dialnumber为电话号码字符串

  begin

  with CallParams do {CallParams的类型参考VC中的定义,将DWORD改为LongInt}

   begin

   dwTotalSize := sizeof(CallParams);

  dwBearerMode := LINEBEARERMODE_VOICE;//承载模式为语音

  dwMediaMode:=LINEMEDIAMODE_INTERACTIV

  EVOICE;//媒体模式为交互式语音

   end;

   if lineInitialize(lineApp,HInstance,lineCallBack,nil,nDevs)<0

   then //线路不能初始化处理

   else

   if nDevs=0 then //无TAPI线路设备

   begin

   lineShutDown(lineApp);

   lineApp:=0;

   end

   else

   if lineNegotiateAPIVersion(lineApp,0,$00010004,$00020000,

   tapiVersion,extid)<0 //协商TAPI版本号 TAPI1.4~TAPI2.0

   then begin {TAPI版本不兼容}

   lineShutDown(lineApp);

   lineApp:=0;

   end

   else

   errorcode:=lineOpen(lineApp,LINEMAPPER,line,tapiVersion,0,0,

  LINECALLPRIVILEGE_NONE,LINEMEDIAMODE_

  INTERACTIVEVOICE,@CallParams);//打开线路

   if errorcode<0 then {线路不能打开}

   else

   begin{线路打开成功}

   lineConfigDialog(0,Self.Handle,nil); //显示线路设备属性

   lineGetIcon(0,`tapi/line`,lineIcon);

   //lineIcon为线路设备图标句柄,可以赋值给TICON.Handle

   if lineMakeCall(line,call,PChar(dialnumber),0,@CallParams)<0 then{呼叫失败处理}

   else

   lineHandOff(call,`电话拨号程序`,LINEMEDIAMODE_INTERACTIVEVOICE);

   //在程序中应当以按钮来触发lineHandOff,从TAPI控制转为人工控制电话

   end;

  end;

  以上代码由于脱离了实际的程序显得有些凌乱,相信对delphi编程稍有了解的朋友很容易看懂。本程序运行后的效果是,首先出现一个数据库表格,用右键打开一个通讯录库文件,右键选择拨号弹出对话框显示线路处理的状态,在拨完号之后提示用户是否拿起听筒进行对话。整个过程类似系统自带的电话拨号程序,不过笔者介绍的TAPI方法可以让我们编写更多的功能和更友好的界面。今后笔者将针对TAPI编程进行深入的介绍,希望能对不太了解TAPI的朋友在开发程序时起到帮助。

C++实现的TAPI通信编程实战 TAPI(Telephony Application Programming Interface)是一种允许软件应用程序控制电话系统的编程接口。它主要用于Windows平台,为开发者提供了一系列的API函数,以实现电话通信的基本功能。在TAPI编程中,多个关键的结构体定义了通信过程中的各种状态和信息。例如:结构体包含了线路设备的能力信息,如支持的电话功能、呼叫特性等。结构体描述了当前呼叫的状态,如是否处于通话中、呼叫的类型等。 阅读详情

相关推荐

TAPI windows电话编程

TAPi 电话编程 windows电话编程

基于Windows的TAPI的调制解调器编程

原文地址::http://www.wangchao.net.cn/bbsdetail_16248.html 一、 简 介:      ---- 随 着Win 操 作 系 统 的 普 及, 计 算 机 之 间 的 通 信 已 经 成 为 大 多 数 应 用 程 序 开 发 的 要 求, 这 其 中 的 主 要 原 因 是Win95 不 仅 仅 能 够 支 持 大 多 数 硬 件, 而 且

xqhrs232的专栏 1016

电话编程(TAPI)

电话编程(TAPI) 为了开发TAPI应用程序,必须调用Tapi32.dll所提供的一系列函数。

用TAPI实现MODEM通信编程

转自:http://bbs.tech.ccidnet.com/read.php?tid=192210TAPI意即Telephony API,是一组Windows操作系统提供的一组针对电话MODEM进行通信编程的API函数。下面就几年前笔者在工程应用中的实际代码对使用TAPI实现电话MODEM通信编程的通信过程和相关API函数作详细的介绍。1、初始化线路通过使用lineInitializeE

ymzhou117的专栏 4478

TAPI编程源码

TAPI编程源码。。。

TAPI编程范例

关于TAPI编程范例

在Windows中获取进程信息

本文只是在写任务管理器项目的随手记录,其中不乏存在许多纰漏,写得也不够详细,希望大家能够指出并谅解。

静下心来,做好每一件事 842

用C++Builder 开发TAPI控制语音Modem呼入呼出电话

使用Microsoft TAPI 控制语音Modem呼入呼出电话 能成功接听呼入的电话及呼出电话

用TAPI为掌上电脑开发通讯应用程序

掌上电脑(即PPC,Palmsize PC)以Windows CE为操作系统 。Windows CE是一种模块化的、开放的、实时的、具有强大通信能力的、抢先式、多任务的嵌入式操作系统。 它具备高性能、高效率的OS特性,包括按需换页、共享存储、交叉处理同步、支持大容量堆(heap)等。它支持文件系统、注册表、以及对象存储(ObjectStore)技术。通过UNICODE完全支持国际字符集。它具有灵活

enginetanmary的专栏 864

蓝牙Mesh安全机制全解析:如何防止你的智能门锁被黑客控制?

本文深入解析蓝牙Mesh安全机制,重点探讨如何保护智能门锁免受黑客攻击。详细介绍了蓝牙Mesh的多层次安全架构,包括密钥管理体系、设备入网流程及实战防护策略,帮助用户构建更安全的智能家居网络。

h3i4j的博客 729

f103vet6 SD卡SDIO+DMA配置避坑指南:从初始化卡死到稳定读写的全流程解析

本文详细解析STM32F103VET6芯片SD卡SDIO与DMA配置中的常见问题,从初始化卡死到读写不稳定的全流程解决方案。重点分析总线宽度配置、时钟分频调整及DMA通道管理技巧,帮助开发者避开常见陷阱,实现稳定高效的数据存储。

u0v1w2x3的博客 666

用DELPHI编写TAPI应用程序

====================================================== 注:本文源代码点此下载 ====================================================== tapi(telphony application programminginterface)可以称作电话编程接口,它是微软提供的计算机和电话网相

javazhuanzai的专栏 454

dummy机械臂代码学习(六)

CLI-Tool文件夹下又包含四个子文件夹,以及一个gitignore文件、一个run_shell.py的python文件、一个run.bat文件和一个zadig exe文件。库解析命令行参数,并根据不同的命令执行相应的操作。Zadig是一个用于Windows操作系统的开源工具,它的主要功能是安装和配置USB驱动程序。的目的呢就是确保在版本控制过程中,不必要的或自动生成的文件被忽略掉,来保持代码仓库的干净和整洁。,DummyStudio的软件作者已放在GitHub,我们主要看CLI-Tool文件夹就行。

jumaohhh的博客 1432

TraySoft AddTapi.NET Crack

  Key Features of TraySoft AddTapi.NET TAPI Library :  Easy Integration with No TAPI Experience Needed: AddTapi.NET simplifies telephony development by handling the complex TAPI processes behind the scenes, making it easy for developers without TAPI experi

q2315702359的博客 538

数据分析:美团大赛的具体案例制作

在数据集中,存在三个变量的经纬度数据,分别是商家的经纬度数据('sender_lng', 'sender_lat'),顾客的经纬度数据('recipient_lng', 'recipient_lat')和骑手的经纬度数据('grab_lng', 'grab_lat')。根据结果可知,平台订单创建时间的中位数为2022-10-21 02:59:01,平台订单创建时间的众数为2022-10-19 03:29:41、2022-10-23 03:29:47,与直方图相符。接下来,我们对是否为预定订单变量进行分析。

m0_68269346的博客 2495

量化回测系统实战指南:从VectorBT到自研框架的深度解析

本文深入解析量化回测系统实战,从VectorBT和Backtesting.py的对比到自研框架miniQuant的设计与优化。探讨如何平衡速度与灵活性,解决实盘适配性问题,并提供性能调优技巧和可视化分析工具,帮助开发者构建高效可靠的量化交易系统。

weixin_28308325的博客 276

TAPI

       我的IVR的起步。学了很快就忘了,不如写点东西纪念一下。TAPI最新版本是3.1, 基于COM的。2.2是用C描述的,我没多去研究。不过网上很多的资料也都是用2.2写的,3.1的很少,或是没有。用TAPI3.1我们不仅可以写出基于公共电话交换网(PSTN)上语音呼叫的应用程序,而且可以写出多点传输的IP多媒体会议。TAPI3.1的四大组成部份:1 COM API 2 TAPI Ser

old_dustman的专栏 2846

bcftools学习笔记(一)

欢迎关注"生信修炼手册"!本篇主要介绍index, view, query, sort, reheader这五个命令。1. indexindex命令用于对VCF文件建立索...

庐州月光的博客 6010

TAPI简介

1、 概述:TAPI是微软公司提供的开发声音和数据相关方面应用的统一接口,主要的函数和结构封装在TAPI32.DLL中,该动态连接库位于Windows操作系统的安装目录的System或System32目录下。 1、 TAPI结构 Windows电话API是用Windows Open Service Architecture(WOSA)模型建立的。设计这个模型是用来使用户方程序设计接口不受服务器硬件

4010

YOLO26改进策略【Head】| (独家改进)轻量化检测头:利用 EfficientNet 中的移动倒置瓶颈模块 MBConv 改进检测头

本文记录的是基于移动倒置瓶颈 MBConv 的 YOLO26 的检测头轻量化改进方法研究。采用了独特的倒置瓶颈结构,通过的操作以及,在高效提取特征的同时极大地降低了计算量。本文将的设计优势融入j检测头中,使其在目标检测任务中不仅能够更精准地识别各类目标,还能在计算资源有限的情况下快速响应,展现出更为卓越的实时检测能力。EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks的实现代码如下: 首先在代码中加入如下代码: 其

Limiiiing的博客 286

ubuntu系统禁止/开启内核自动更新

内核自动更新会导致驱动和内核版本不对应,导致驱动无法使用,所以需要禁止自动更新内核。本文介绍ubuntu系统禁止/开启内核更新的方法。

m0_50105717的博客 5289

tapi python

我整理的一些关于【数据】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/eDOcp1探索 TAPi 和 Python 的结合 在机器学习和数据科学的世界里,Python 已成为一种广泛使用的编程语言,其简单明了的语法和强大的库支持使其深受欢迎。然而,了解如何使用 Python...

weixin_33023873的博客 152

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

TAPI基本函数的使用

Only Use In TAPI Version 1.4Basic Telephony Services Reference1.TAPI初始化与关闭LineInitializeEx     初始化一个TAPI应用, 同步返回.LineShutdown 关闭一个TAPI应用, 同步返回. 2.线路版本协商LineNegotiateAPIVersion     应用和TAPI协商一个可以使用的

阿科 专栏 1655

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

TAPI协议介绍

TAPI协议介绍TAPI(电话应用程序接口)是一个标准程序接口,它可以使用户在电脑上通过电话或视频电话与电话另一端的人进行交谈。假设你的电脑上安装了TAPI,并且你安装了正确的应用程序和硬件设备,那么你就可以实现:  1.点击某人的照片即可实现通话  2.使用类似图形用户界面(GUI)来建立一个会议电话,然后准时参加会议。  3.可以看到与你谈话的人  4.可以在你发送的e-mail中添加语音文件

chszs的专栏 5476

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

TAPI基本函数

Only Use In TAPI Version 1.4Basic Telephony Services Reference1.TAPI初始化与关闭LineInitializeEx  初始化一个TAPI应用, 同步返回.LineShutdown 关闭一个TAPI应用, 同步返回. 2.线路版本协商LineNegotiateAPIVersion  应用和TAPI协商一个可以使用的TAPI版本, 同步

mutant的专栏 1537
上一篇: 谈Delphi编程中资源文件的应用
下一篇: 如何在Delphi中编写控制面板程序
thinkray
博客等级 码龄22年 0粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值