传真服务

本文详细介绍了微软的传真服务,包括传真服务的特性、客户端API、路由扩展API和供应商API。它允许用户从应用程序中收发传真,提供灵活的接收方式,支持存档已发送的传真,并能进行服务器和设备配置管理。文章涵盖了Win32和COM环境下的实现,讨论了发送传真、管理传真作业、设备配置和安全性等方面,并提供了编程任务的概述。
摘要由CSDN通过智能技术生成

这个又是先贴到记事本然后贴过来的,格式没有了,呵呵

这个也是很久以前的东西,如果有地方不准确的话,还请大家见谅!

里面的插图大家可以看msdn(这里不能直接拷贝进来图形,好麻烦,sorry)

传真服务篇
第1章 微软传真服务简介
微软®传真服务是使网络用户可以从应用程序中收发传真的一种兼容TAPI(电话应用程序接口)的系统服务,此服务可在微软®Windows® 2000及以后版本获得并具有以下特点:
⑴传送传真
⑵灵活的接收传真
⑶存档已发送的传真文件
⑷服务器和设备配置管理
下表详细列出了可用来开发传真客户程序和扩展传真服务的应用程序接口(API)。        
传真服务客户API 软件开发者能在客户应用程序里合并基本的传真函数,包括输出传真服务、查询和管理传真作业及传真设备。
传真路由扩展API 第三方的软件供应商通过定义输入传真路由扩展来扩展传真服务。此扩展提供了一种灵活的方法以连接接收传真的应用程序,如:打印、保存传真,变换传真图形图像到文本文件等。
传真服务供应商API 传真设备制造商提供符合国际电信联盟(ITU)T.30 规范的非调制解调器电话设备支持的传真服务供应商。(微软调制解调器传真服务供应商提供 的T.30传真协议支持带有传真服务调制解调器设备。)
下图显示了传真服务的基本结构
 
传真服务供应商和传真路由扩展动态链接库(DLLs)由微软®或设备制造商(OEM)提供。
第2章 传真服务客户应用程序接口( API )
传真服务客户API允许客户在其应用程序中合并基本传真功能。此项技术适用于运行windows 2000及更高版本的计算机。API包括win32函数和COM双重接口实现。
本章第一部分构画使用传真服务客户 API可以实现的任务及支持该功能所需的组件,同时也描述了传真服务的安全性,最后对传真端口、传送传真、传真封面和传真路由方法进行了简洁讨论。第二部分讨论win32和COM实现环境下传真程序的差别。还讨论了传真客户函数、COM双重接口以及下列有关的编程任务。
⑴连接到传真服务器
⑵传真服务器配置管理
⑶传真设备管理
⑷管理传真路由数据
⑸发送传真
⑹管理传真作业
⑺释放传真资源
⑻断开与传真服务器的连接
注:在阅读本篇之前,应该对电话应用编程接口( TAPI )和微软®电话服务供应商( TSPI ) 有所熟悉,如果计划使用传真客户的COM实现,也应该熟悉COM (部件对象模型)和自动化编程概念。
2.1、传真服务客户 API 简介
微软®的传真服务为在本地网(LAN)上的客户提供传真服务。传真服务客户 API 允许开发者在其应用程序里合并服务并激活基本传真功能。传真服务客户API 包括Win32 函数接口和 COM 接口。
⑴Win32 环境
Win32 函数作为动态链接库 WinFax.dll文件被实现。这是一种客户机/服务器实现模式,允许远程计算机上的传真客户与使用 RPC 的传真服务器进行通讯。客户机可以使用共享网络传真打印机访问输出传真服务,或者应用程序可以调用传真服务客户 API中的函数连接一台远程传真服务器进行传真传送。        
⑵ COM 实现环境
COM 接口作为双重接口被VB和C/C++程序员接纳与实现。本文为两种编程语言均提供参考资料。
下图显示了传真客户应用程序的概貌:
 
要实现传真服务,必须在原代码文件中包含WinFax.h 头文件,而要使用微软支持的传真客户COM实现则必须包含 FaxCom.h头文件。                             
2.1.1、传真服务客户API功能
   传真服务客户 API使传真客户应用程序可以执行下列任务:
  ⑴传送一个存储于计算机中的文档。应用程序能把文档作为一份传真传送到一个或广播到多个程序定义的接受者。
  ⑵传送一张封面页。用户可以用传真传送一张封面页,该封面可为服务器上的公用封面页,也可以是一张个人的封面页。
  ⑶通过将打印文档为设备上下文来传送活动文档。基于文档的应用程序可以阻止传真发送向导的显示。程序能够直接为传真客户图形设备接口(GDI)提供传送信息,并且将它打印到一个传真设备上下文来传送一份活动文档。
⑷传送一份传真文档到活动调用。使用已经存在的输入链接线路来传送文档可以节约发送传真的费用,这就是所谓的“Faxback服务”。
⑸使用传真发送向导发送活动文档。用户可以通过把文档打印到传真打印机来传送该文档。传真发送向导会收集用户的传送信息,而开发者则只需使用打印功能即可。
⑹改变传真设备和传真服务器的配置。应用程序可提供配置管理或可使用微软管理控制台( MMC ) 插件组件中的传真配置服务管理应用程序来进行配置。
2.1.2、传真服务客户 API 软件要求
下列组件被要求支持传真服务客户API的功能 :
⑴ 传真服务( FaxSvc.exe )。支持传真服务的应用程序可以管理传真设备、配置数据、提供打印服务并收发传真文件。通过传真路由扩展传真服务也可以初始化和重发输出传真路由方法。
⑵winFax.lab。包含传真服务客户 API功能的静态链接库。
⑶winFax.dll。包含传真服务客户 API 功能的动态链接库。
此外,必须在源代码文件中包括 WinFax.h 头文件;而使用微软支持的传真客户 COM 实现,则须包括 FaxCOM.h头文件。
传真服务可以与使用 RPC 的网络客户机进行通讯。尽管不需要在每台客户计算机上安装传真服务,但服务一定要可以由 RPC访问到客户计算机。
2.1.3、传真服务可执行文件和相关文件
下列表格描述了与传真服务相关的可执行文件、 DLL和头文件。
文件名 描述
FaxSvr.exe 管理传真设备、配置数据、提供打印服务和收发传真文件的传真服务支持应用程序,
FaxAdmin.dll 微软管理控制台( MMC )插件组件之一的传真服务管理应用程序,提供配置管理功能。
FaxMon.dll 包含传真打印监视器的动态链接库
WinFax.dll 包含传真服务客户API功能的动态链接库
WinFax.lib 包含传真服务客户API功能的静态链接库  
FaxCom.dll 传真服务客户API的COM接口
FaxCover.exe 传真封面页编辑应用程序
FaxExt32.dll 包含 MAPI用户接口扩展的动态链接库
FaxXp32.dll 包含传真邮件传送功能的动态链接库。 
FaxRoute.dll 包含微软®传真路由扩展的动态链接库。
FaxDev.h 包含传真服务供应商 API 原型的头文件。
FaxRoute.h 包含传真路由扩展API 原型的头文件
WinFax.h 包含传真客户服务 API Win32环境原型的头文件
FaxT30.dll 包含微软®调制解调器传真服务提供商的动态链接库
FaxDrv.dll 传真打印机驱动程序动态链接库
FaxUi.dll 传真打印机驱动程序动态链接库
2.1.4、设备和配置管理
传真服务提供的传真服务管理应用程序是微软管理控制台( MMC )插件组件之一,传真客户程序可以进行配置管理或使用管理程序进行下列配置管理任务:
 ⑴指定收发传真的器件
 ⑵指定可在端口上执行的路由方法
 ⑶配置全局服务数据
2.1.5、传真端口
本章中,传真端口始终被看作是一台传真设备以及与设备相联系的配置和与输入信息路由,传真服务为用户提供一个或多个传真端口作为传真传送的终点。
传真虚拟设备也存在传真端口,这就意味着传真可以输出到连接至传真服务器的非严格物理设备终端。支持互联网传送传真的传真服务供应商即是使用虚拟传真设备的供应商的例子。
2.1.6、传真端口的访问级别
传真服务客户 API 允许应用程序查询和修改传真端口的配置数据。
⑴Win32环境
为了使用户能访问个端口的配置数据, 传真客户应用程序在调用 FaxOpenPort函数时,必须指定正确的传真端口访问级别。FaxOpenPort 返回传真端口句柄并根据指定的访问级别打开端口。应用程序根据用户的需求和许可,可查询下列值:
值 意义
PORT_OPEN_QUERY 调用FaxGetPort、 FaxEnumPort和FaxGetDeviceStatus 函数查询传真端口信息的端口访问级别
PORT_OPEN_MODIFY 调用FaxSetPort 函数修改传真端口配置的端口访问级别,默认为是与PORT_OPEN_QUERY访问级别联系的访问权限。
除了要求端口用恰当的访问级别打开之外,传真服务也要求用户查询并且修改端口数据时,要有恰当的访问权限。要获得传真端口句柄和查询端口数据,用户必须获得FAX_PORT_QUERY许可;要修改端口数据,用户必须获得 FAX_PORT_SET 许可。
传真客户应用程序可以调用 FaxAccessCheck函数查询用户的访问权限。也可使用微软管理控制台( MMC )插件组件之一的传真服务管理应用程序来修改用户端口访问权限。
⑵COM实现环境
在应用程序调用修改FaxPort属性的方法之前,须调用 IFaxPort::get CanModiFy方法(检索 V B 中FaxPort对象的CanModify 属性)以确保客户有权修改端口的配置。
2.1.7、传真客户程序的用户访问权限
传真服务是一种安全的服务。在 Win32 环境下,用户必须拥有访问权限以成功调用某一传真客户程序函数,每次客户程序调用传真客户程序函数前服务均进行访问权限检查。应用程序可以由调用 FaxAccessCheck 函数来检查用户的访问权限,。
如果使用微软®的 COM 实现,则此时传真客户应用程序无法获得该项功能。若客户没有执行特定任务的访问权限,则方法或函数失败且返回HRESULT_FROM_WIN32 ( ERROR_ACCESS_DENIED )。
微软管理控制台( MMC )插件组件之一传真服务管理应用程序,为用户提供查询和修改作业访问权限、端口访问权限和全局配置数据访问权限。
下面就详细叙述传真访问权限的内容。
  2.1.7.1、特定传真访问权限
如果使用微软 COM 实现,则此时传真客户应用程序无法利用此项功能。
传真服务客户API 定义下列特定访问权限,为用户查询和管理传真作业、传真设备和传真文档提供安全保障。        
值 意义
FAX_CONFIG_QUERY 允许在传真服务器级查询配置和路由方法数据
FAX_CONFIG_SET 允许在传真服务器级修改配置和路由方法数据
FAX_JOB_MANAGE 允许在程序中终止传真作业或改变传真作业队列的状态
FAX_JOB_QUERY 允许查询队列中和活动传真作业
FAX_JOB_SUBMIT 允许发送传真到一个或多个接收者
FAX_PORT_QUERY 允许在端口级查询配置、状态和路由算法数据;此访问权限有获取和关闭传真端口句柄的能力
FAX_PORT_SET 允许在端口级修改配置和路由方法数据;此权限有启用或屏蔽传真路由算法的能力
2.1.7.2、通用传真访问权限
如果使用微软 COM 实现,则此时传真客户应用程序无法利用此项功能。
传真服务客户API 定义下列通用传真访问权限,公共权限默认用户有特定传真访问权限:
值 意义
FAX_READ 包含由由特定访问权限FAX_JOB_QUERY、FAX_CONFIG_QUERY 和 FAX_PORT_QUERY认可的只读权限
FAX_WRITE 此访问等同于FAX_JOB_SUBMIT特定访问权限认可的许可。注意此权限不包括在端口或服务器级修改数据许可。
FAX_ALL_ACCESS 包括由下列特定访问权限认可的所有的读写许可: FAX_CONFIG_QUERY、 FAX_CONFIG_SET、FAX_JOB_MANAGE、FAX_JOB_QUERY、FAX_JOB_SUBMIT、FAX_PORT_QUERY和FAX_PORT_SET
2.1.7.3、函数要求的传真访问权
下列表格列出了win32环境下,用户成功地调用某个传真客户函数后可获得的访问权限。
访问权限 函数
FAX_CONFIG_QUERY(传真配置查询) FaxEnumGlobalRoutingInFo
 FaxGetConFiguration
 FaxGetLoggingCategories
FAX_CONFIG_SET(传真配置设置) FaxSetConFiguration 
 FaxSetGlobalRoutingInFo 
 FaxSetLoggingCategories
FAX_JOB_QUERY(传真作业查询) FaxEnumJobs
 FaxGetJob
 FaxGetPageData
FAX_JOB_SET(传真作业设置) FaxAbort
 FaxSetJob
FAX_JOB_SUBMIT(传真作业提交) FaxSendDocument
 FaxSendDocumentForBroadcast
FAX_PORT_QUERY(传真端口查询) FaxClose
 FaxEnumPorts*
 FaxEnumRoutingMethods
 FaxEnumRoutingMethods
 FaxGetDeviceStatus*
 FaxGetPort*
 FaxGetRoutingInFo
 FaxOpenPort
FAX_PORT_SET(传真端口设置) FaxEnableRoutingMethod 
 FaxSetPort* 
 FaxSetRoutingInFo
*此函数要求特定传真端口访问级。   
注意:FAX_JOB_MANAGE 访问级别允许用户调用FaxAbort 函数和FaxSetJob 函数。                                                           2.1.8、传送传真
传送输出传真有以下要点:
⑴文档文件。传真服务转换数据为传真的标签图象文件格式F类格式(TIFF 6.0 F类)。
⑵发送信息。该信息包括传真序号、发送者和接收者数据、可选的账单编码方式以及作业安排信息。在 Win32 环境下,如果将应用程序打印到设备上下文,则FAX_PRINT_INFO结构会包含此信息否则由FAX_JOB_PARAM 结构包含信息。如果使用微软®COM 实现方式,可以设置 FaxJob对象的多重属性来指定发传信息。
⑶可选封面页文件。在 Win32 环境下,FAX_COVERPAGE_INFO 结构包含此数据,该结构提供封面页模板文件名 (.cov)及用户自定义的模板信息。如果使用微软®COM 实现,可设置FaxDoc对象的多重属性来指定封面页息。
2.1.9、封面页
封面页是一个封面页模板文件( .cov )和传真传送时提供给模板的用户自定义信息。
传真服务客户 API 支持封面页打印。封面页可为存储在本地计算机上的个人封面页文件,或为存储在传真服务器上存储的公共封面页。要获取封面页,用户必须提供应封面页文件的完整合法路径或公共封面页文件的相对路径。
典型情况下,管理器将公共封面页文件存储在如下的位置:
//SERVERNAME/FAX$/Coverpg
在个人计算机系统上,公共封面页文件存储于:
CSIDL_APPDATA/MicrosoFt/Windows NT/MSFax/coverpg
用户能够通过使用传真控制面板应用程序来添加个人封面页文件,但此文件必须存储于用户“我的文档”标准文件夹的如下位置:
CSIDL_PERSONAL/Fax/Personal Coverpages
此外,在 Win32 环境下,如果用户要指定一个公共封面页文件,就必须设置 FAX_COVERPAGE_INFO结构的UseServerCoverPage 成员为真。而在COM 实现环境下,则须设置FaxDoc对象的ServerCoverpage属性为真。
一个传真客户应用程序可以调用 FaxPrintCoverPage 函数将封面页打印到传真打印机设备上下文。
2.1.10、传真路由方法
传真路由方法是由传真路由扩展动态链接库(DLL)定义的一种程序。当传真端口收到输入传真时,按照优先级顺序执行传真路由方法。
由于以下原因,我们需要使用GUID来确定传真路由方法:
⑴一个传真路由扩展DLL可以支持多个路由方法。
⑵一个传真路由扩展DLL 可以为每个路由方法和传真设备提供唯一的配置数据。
⑶多重传真路由扩展 DLLs可用相同的名字输出路由方法。
2.1.11、传真客户API编程任务
下面我们就具体描述在传真客户应用程序中,要求合并传真服务客户 API功能的典型任务。
2.1.11.1、win32传真客户编程任务
以下步骤总结了在win32编程环境下,编写一份传真客户应用程序需要合并传真服务客户API功能的典型编程任务。 
⑴调用FaxconnectFaxsever函数连接到传真服务器。注意除非服务器是本地计算机,否则应用程序必须提供服务器名。
⑵必要时,可调用一个或多个传真服务枚举函数。这些函数允许用户查看与传真服务器相连的传真端口和与端口相连的路由信息,也允许用户查看活动传真作业列表。这些枚举函数包括FaxEnumGlobalRoutingInFo、 FaxEnumJobs、 FaxEnumPorts和FaxEnumRoutingMethods函数。
⑶调用FaxOpenPort函数获取传真端口句柄。
⑷必要时,可调用FaxGetRoutingInFo、FaxSetRoutingInFo和FaxEnableRoutingMethod函数之一或多个来查询和修改传真端口的路由信息。
⑸可以调用FaxSendDocument或 FaxSendDocumentForBroadcast 函数来传送传真文件。注意应用程序必须提供诸如传真序号和接收者数据之类的传送信息。
⑹调用FaxFreebuFFer函数来释放应用程序调用FaxCOMpletejobparams函数以及Faxenum或Faxget开始的函数时所分配的资源。
⑺分两次调用FaxClose 函数。第一次调用断开应用程序与传真端口的连接,第二次调用则断开应用程序与传真服务器的连接。
此外,应用程序需要调用其它函数来查询设备或服务器配置数据、管理传真作业以及打印传真。
2.1.11.2、在C/C++程序中使用 COM 实现
以下步骤总结了COM实现环境下,用C/C++编写一份传真客户应用程序需要合并传真服务客户API功能的典型编程任务。
⑴调用CoCreateInstance函数创建一个FaxServer对象实例,然后调用IFaxServer::Connect 接口方法连接到活动传真服务器。
⑵调用下列iFaxsever接口方法中的一个或多个来创建所需对象:
a.调用IFaxServer::GetJobs 方法创建一个 FaxJobs对象,然后使用此对象创造 FaxJob 对象并枚举与所连结传真服务器的相关传真作业。
b.调用IFaxServer::Getports方法创建一个 Faxports对象,然后使用此对象创造 Faxport 对象并枚举与所连结传真服务器的相关传真端口配置信息。
c.调用IFaxServer::CreateDocument方法创建一个Faxdoc对象,然后使用此对象来发送传真以及检索和设置Faxdoc对象属性。
⑶在为特定端口创建FaxPort对象实例之后,即可调用 IFaxPort::GetRoutingMethods 接口方法创建FaxRoutingMethod对象,当然也可调用IFaxRoutingMethods::get_Item 接口方法创建FaxRoutingMethod对象。FaxRoutingMethod对象允许程序员查询和修改传真端口的传真路由信息。
⑷调用IFaxPort::GetStatus接口方法即可创建Faxstatus对象,该对象允许

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值