SmarFaxh.h
上传用户:zf1208
上传日期:2007-06-11
资源大小:291k
文件大小:16k
源码类别:

传真(Fax)编程

开发平台:

C/C++

  1. #ifndef __SMARTFAX_H_
  2. #define __SMARTFAX_H_
  3. #include <tapi.h>
  4. #include <windows.h>
  5. /*
  6. #ifdef  __cplusplus
  7. extern "C" {
  8. #endif
  9. */
  10. typedef  HANDLE SmartFaxObj;
  11. enum EResolution
  12. {        
  13.     RE_FINE,    
  14.     RE_STANDARD
  15. };
  16. enum EClass
  17. CLASS_1,
  18. CLASS_2
  19. };
  20. enum EErrorCorrect
  21. {
  22. ECM_DISABLE,
  23. ECM_ENABLE 
  24. };
  25. enum EBinaryFile
  26. {
  27. BFT_DISABLE,
  28. BFT_ENABLE 
  29. };
  30. enum ECreateHead
  31. CH_DISABLE,
  32. CH_ENABLE
  33. };
  34. enum EUsed2D
  35. U2D_DISABLE,
  36. U2D_ENABLE
  37. };
  38. enum EFaxSpeed
  39. FS_2400,
  40. FS_4800,
  41. FS_7200,
  42. FS_9600,
  43. FS_1200,
  44. FS_1440,
  45. };
  46. enum EVolume
  47. VO_OFF,
  48. VO_LOW,
  49. VO_MIDDLE,
  50. VO_HIGH
  51. };
  52. typedef struct tag_SFaxParam
  53. {
  54. HCALL hCall;
  55. HLINE hLine;
  56. EResolution Resolution; // 传真质量(RE_FINE | RE_STARDARD)
  57. unsigned char nComPort ; // 端口号(1 - 256 )
  58. EFaxSpeed Speed; //传真速度 ( 24 | 48 | 72 | 96 | 120 |144)
  59. EUsed2D Is2D; //压缩方式(U2D_ENABLE | U2D_DISABLE)
  60. EClass Class; //传真类型(CLASS_1 | CLASS_2 | CLASS_1.0 | CLASS_2.0)
  61. EVolume Volume; //Modem应答音量( 0 | 1 | 2 | 3 )
  62. char FileName[MAX_PATH]; //传真文件名
  63. char Identifi[56]; //传真识别符(一般添入自己的传真号码)
  64. EErrorCorrect Ecm; //纠错方式(ECM_ENABLE | ECM_DISABLE )
  65. HWND Hwnd; // 消息窗口句柄
  66. UINT Msg; //消息ID (WM_SMARTFAX)
  67. SmartFaxObj *hFax; //传真对象句柄
  68. // send extrac parameter
  69. char FaxNumber[21]; //传真号码
  70. char From[128]; //发送者信息
  71. char To[128]; //接受者信息
  72. ECreateHead CreateHead; //建立传真页眉信息( CH_DISABLE | CH_ENABLE)
  73. EBinaryFile BinaryFile; //两进制文件传输(BFT_DISABLE | BFT_ENABLE )
  74. int nStartPage; //开始页
  75. #if defined(__cplusplus) && !defined(__BORLANDC__)
  76.     //EXPDEF SFaxParam();
  77. #endif
  78. }SFaxParam;
  79.   
  80. const unsigned short D1DMR = 0; // 1-D Modified Huffman
  81. const unsigned short D2DMR = 1; // 2-D Modified Huffman
  82. const unsigned short D2DMMR = 3; // 2-D Modified Modified Read
  83. typedef void (CALLBACK * MODEMLISLITNECALLBACK)(DWORD dwDeviceId, const char *sLineName, const char *ComPort,unsigned long lParam);
  84. static void CALLBACK ModemListCallbackFunc(DWORD dwDeviceId, const char *sLineName, const char *ComPort,unsigned long lParam);
  85. static void CALLBACK ModemListCallbackFunc(DWORD dwDevice, const char *sLineName, const char *ComPort,unsigned long lParam)
  86. {
  87. fprintf(stderr,"DeviceID: %d nLineName: %snCommPort: %s n",dwDevice,sLineName,ComPort);
  88. }
  89. /**********************************************************************************
  90. 函数名:<GetModemDeviceList>
  91. ----------------------------
  92. 功能: 获得所有可用Modem列标信息
  93. ----------------------------
  94. 参数:
  95. 1: lParam
  96. 2: lpfnCallback  回调函数
  97. ************************************************************************************/
  98. bool GetModemDeviceList( unsigned long lParam, MODEMLISLITNECALLBACK lpfnCallback = ModemListCallbackFunc );
  99. /**********************************************************************************
  100. 函数名:<ErrorCorrectFaxPage>
  101. ----------------------------
  102. 功能: 修正传真页
  103. ----------------------------
  104. 参数:
  105. 1: Input 输入文件名
  106. 2: Output 输出文件名
  107. 3: CompressionDF 压缩方式
  108. ************************************************************************************/
  109. int ErrorCorrectFaxPage(const char *Input,const char*Output,unsigned short CompressionDF = D2DMMR);
  110. long InitFaxTapiCall(HLINE &hLine,HCALL &hCall);
  111. int ModemGetComPort( const char* strName );
  112. /**********************************************************************************
  113. 函数名:<AbortPort>
  114. ----------------------------
  115. 功能: 中断传真操作!
  116. ----------------------------
  117. 参数:
  118. 1: hFax 传真对象句柄
  119. ************************************************************************************/
  120. int AbortPort(SmartFaxObj *hFax);
  121. /**********************************************************************************
  122. 函数名:<SmartFaxMonitorPort>
  123. ----------------------------
  124. 功能: 监视端口消息!
  125. ----------------------------
  126. 参数:
  127. 1: hFax 传真对象句柄
  128. 2: nPort 端口号
  129. 3: hWnd 消息窗口句柄
  130. 4: Msg 消息ID (WM_SMARTFAX)
  131. ************************************************************************************/
  132. int SmartFaxMonitorPort(SmartFaxObj *hFax ,unsigned char nPort,HWND hWnd,UINT Msg);
  133. /**********************************************************************************
  134. 函数名:<TapiSmartReceiveFax>
  135. ----------------------------
  136. 功能: 通过TAPI接口接收传真!
  137. ----------------------------
  138. 参数:
  139. 1: FaxParam 传真参数 (见SFaxParam定义)
  140. ************************************************************************************/
  141. int TapiSmartReceiveFax(SFaxParam *FaxParam);
  142. /**********************************************************************************
  143. 函数名:<_TapiSmartReceiveFax>
  144. ----------------------------
  145. 功能: 通过TAPI接口接收传真!
  146. ----------------------------
  147. 参数:
  148. 1: hFax 传真对象句柄
  149. 2: hCall 传真参数
  150. 3: hline 传真参数
  151. 4: FileName 传真文件名
  152. 5: Identifi 传真识别符(一般添入自己的传真号码)
  153. 6: Volume Modem应答音量( 0 | 1 | 2 | 3 )
  154. 7: Speed 传真需要的速度( 24 | 48 | 72 | 96 | 120 |144) 
  155. 8: Class 传真类型(CLASS_1 | CLASS_2 | CLASS_1.0 | CLASS_2.0)
  156. 9: Is2d 压缩方式(U2D_ENABLE | U2D_DISABLE) 
  157. 10: ECM 纠错方式(ECM_ENABLE | ECM_DISABLE )
  158. 11: hWnd 消息窗口句柄
  159. 1:  Msg 消息ID (WM_SMARTFAX)
  160. 返回值:
  161.   
  162. 0:     End if function completes successfully
  163. -1:     Exception error
  164. 101:    Failed to Open FAX file ~
  165. 102:    Couldn't conneced  within 35 secs of ATA command
  166. 103: Resevr
  167. 104:    Failed to send CSI frames 
  168. 105:    Failed to send DIS frames 
  169. 106:    Failed to send NFS frames 
  170. 107:    Failed to send other negotiating frames
  171. 108:    Failed to send CFR frames
  172. 109:    Failed to training
  173. 110:    Failed to send FTT frames
  174. 111:    Failed to set training speed  3 times
  175. 112:    Failed to send CRP frames
  176. 113:    Failed to dropped carrier within 5 s 
  177. 114:    Failed to respond to +FRM properly
  178. 115:    Failed to get modem data
  179. 116:    Failed to accept page data
  180.    201: Couldn't be found transmit file 
  181. 202: Transmit file isn't TIFF CLASS
  182. 203: Call isn't answered within 30 s
  183. 204: Machine can't receive fax data
  184. 205: Couldn't set +FTM
  185. 206: Couldn't set +FTM
  186. 210: NO DIALTONE
  187. 211: BUSY
  188. 212: NO ANSWER
  189. 213: NO CARRIER
  190. ************************************************************************************/
  191. int _TapiSmartReceiveFax(SmartFaxObj *hFax ,HCALL &hCall,HLINE &hline,const char *FileName, 
  192.  const char *Identifi,EVolume Volume ,EFaxSpeed Speed,
  193.  EClass Class,EUsed2D Is2d,EErrorCorrect ECM,HWND hWnd,UINT Msg);
  194. /**********************************************************************************
  195. 函数名:<TapiSmartSendFax>
  196. ----------------------------
  197. 功能: 通过TAPI接口发送传真!
  198. ----------------------------
  199. 参数:
  200. 1: FaxParam 传真参数 (见SFaxParam定义)
  201. ************************************************************************************/
  202. int TapiSmartSendFax(SFaxParam *FaxParam);
  203. /**********************************************************************************
  204. 函数名:<_TapiSmartSendFax>
  205. ----------------------------
  206. 功能: 通过TAPI接口发送传真!
  207. ----------------------------
  208. 参数:
  209. 1: hFax 传真对象句柄
  210. 2: hCall 传真参数
  211. 3: hline 传真参数
  212. 4: FileName 传真文件名
  213. 5: Identifi 传真识别符(一般添入自己的传真号码)
  214. 6: Volume Modem应答音量( 0 | 1 | 2 | 3 )
  215. 7: Speed 传真需要的速度( 24 | 48 | 72 | 96 | 120 |144) 
  216. 8: Class 传真类型(CLASS_1 | CLASS_2 | CLASS_1.0 | CLASS_2.0)
  217. 9: Is2d 压缩方式(U2D_ENABLE | U2D_DISABLE) 
  218. 10: ECM 纠错方式(ECM_ENABLE | ECM_DISABLE )
  219. 11: CreateHead 建立传真页眉信息
  220. 12: Resolution 传真质量
  221. 13: From 发送者
  222. 14: To 接受者
  223. 15: hWnd 消息窗口句柄
  224. 16: Msg 消息ID (WM_SMARTFAX)
  225. 返回值:
  226.   
  227. 0:     End if function completes successfully
  228. -1:     Exception error
  229. 101:    Failed to Open FAX file ~
  230. 102:    Couldn't conneced  within 35 secs of ATA command
  231. 103: Resevr
  232. 104:    Failed to send CSI frames 
  233. 105:    Failed to send DIS frames 
  234. 106:    Failed to send NFS frames 
  235. 107:    Failed to send other negotiating frames
  236. 108:    Failed to send CFR frames
  237. 109:    Failed to training
  238. 110:    Failed to send FTT frames
  239. 111:    Failed to set training speed  3 times
  240. 112:    Failed to send CRP frames
  241. 113:    Failed to dropped carrier within 5 s 
  242. 114:    Failed to respond to +FRM properly
  243. 115:    Failed to get modem data
  244. 116:    Failed to accept page data
  245.    201: Couldn't be found transmit file 
  246. 202: Transmit file isn't TIFF CLASS
  247. 203: Call isn't answered within 30 s
  248. 204: Machine can't receive fax data
  249. 205: Couldn't set +FTM
  250. 206: Couldn't set +FTM
  251. 210: NO DIALTONE
  252. 211: BUSY
  253. 212: NO ANSWER
  254. 213: NO CARRIER
  255. ************************************************************************************/
  256. int _TapiSmartSendFax(SmartFaxObj *hFax ,HCALL &hCall,HLINE &hline,const char *Tel,const char *FileName,
  257.   const char *Identifi,EVolume Volume ,EFaxSpeed Speed,EClass Class,EUsed2D Is2d,
  258.   EErrorCorrect ECM,ECreateHead CreateHead,EResolution Resolution,
  259.   const char * From ,const char * Receiver,HWND hWnd,UINT Msg,int nStartPage);
  260. /**********************************************************************************
  261. 函数名: <SmartReceiveFax>
  262. ----------------------------
  263. 功能: 直接通过端口接收传真
  264. ----------------------------
  265. 参数:
  266. 1: FaxParam 传真参数 (见SFaxParam定义)
  267. ************************************************************************************/
  268. int SmartReceiveFax(SFaxParam *FaxParam);
  269. /**********************************************************************************
  270. 函数名:<_SmartReceiveFax>
  271. ----------------------------
  272. 功能: 直接通过端口接收传真
  273. ----------------------------
  274. 参数:
  275. 1: hFax 传真对象句柄
  276. 2: nPort 端口号
  277. 3: FileName 传真文件名
  278. 4: Identifi 传真识别符(一般添入自己的传真号码)
  279. 5: Volume Modem应答音量( 0 | 1 | 2 | 3 )
  280. 6: Speed 传真需要的速度( 24 | 48 | 72 | 96 | 120 |144) 
  281. 7: Class 传真类型(CLASS_1 | CLASS_2 | CLASS_1.0 | CLASS_2.0)
  282. 8: Is2d 压缩方式(U2D_ENABLE | U2D_DISABLE) 
  283. 9:  ECM 纠错方式(ECM_ENABLE | ECM_DISABLE )
  284. 10: hWnd 消息窗口句柄
  285. 11: Msg 消息ID (WM_SMARTFAX)
  286. ************************************************************************************/
  287. int _SmartReceiveFax(SmartFaxObj *hFax  ,unsigned char nPort  ,const char *FaxFileName , 
  288.  const char *Identifi,EVolume Volume = VO_LOW,  EFaxSpeed Speed =FS_1440,  
  289.  EClass Class = CLASS_1 ,EUsed2D Is2d = U2D_ENABLE ,EErrorCorrect ECM = ECM_ENABLE,
  290.  HWND hWnd = NULL ,UINT Msg = NULL);
  291. /**********************************************************************************
  292. 函数名:_SmartReceiveFax
  293. 功能:接收传真文件
  294. 参数:
  295. 1: nPort 端口号
  296. 2: FaxFileName 传真文件名
  297. 3: Identifi     传真识别符(一般添入自己的传真号码)
  298. 4: Speed 传真需要的速度(default 96) 
  299. 5: Fclass CLASS TYPE (defualt Class 1)
  300. 6: Twodee 压缩方式(0 - 1D,1 - 2D defaul 1 ) 
  301. 7: ECM 纠错方式(defaul 1)
  302. 8: hWnd 接受传真消息的窗口句柄
  303. 9: Msg 传真消息
  304. 返回值:
  305.     0:     End if function completes successfully
  306. -1:     Exception error
  307. 101:    Failed to Open FAX file ~
  308. 102:    Couldn't conneced  within 35 secs of ATA command
  309. 103: Resevr
  310. 104:    Failed to send CSI frames 
  311. 105:    Failed to send DIS frames 
  312. 106:    Failed to send NFS frames 
  313. 107:    Failed to send other negotiating frames
  314. 108:    Failed to send CFR frames
  315. 109:    Failed to training
  316. 110:    Failed to send FTT frames
  317. 111:    Failed to set training speed  3 times
  318. 112:    Failed to send CRP frames
  319. 113:    Failed to dropped carrier within 5 s 
  320. 114:    Failed to respond to +FRM properly
  321. 115:    Failed to get modem data
  322. 116:    Failed to accept page data
  323.    201: Couldn't be found transmit file 
  324. 202: Transmit file isn't TIFF CLASS
  325. 203: Call isn't answered within 30 s
  326. 204: Machine can't receive fax data
  327. 205: Couldn't set +FTM
  328. 206: Couldn't set +FTM
  329. 210: NO DIALTONE
  330. 211: BUSY
  331. 212: NO ANSWER
  332. 213: NO CARRIER
  333. *******************************************************************************/
  334. /**********************************************************************************
  335. 函数名: <SmartSendFax>
  336. ----------------------------
  337. 功能: 直接通过端口接收传真
  338. ----------------------------
  339. 参数:
  340. 1: FaxParam 传真参数 (见SFaxParam定义)
  341. ************************************************************************************/
  342. int SmartSendFax(SFaxParam *FaxParam);
  343. /**********************************************************************************
  344. 函数名:<_SmartSendFax>
  345. ----------------------------
  346. 功能: 直接通过端口发送传真
  347. ----------------------------
  348. 参数:
  349. 1: hFax 传真对象句柄
  350. 2: nPort 端口号
  351. 3: FileName 传真文件名
  352. 4: Identifi 传真识别符(一般添入自己的传真号码)
  353. 5: Volume Modem应答音量( 0 | 1 | 2 | 3 )
  354. 6: Speed 传真需要的速度( 24 | 48 | 72 | 96 | 120 |144) 
  355. 7: Class 传真类型(CLASS_1 | CLASS_2 | CLASS_1.0 | CLASS_2.0)
  356. 8: Is2d 压缩方式(U2D_ENABLE | U2D_DISABLE) 
  357. 9:  ECM 纠错方式(ECM_ENABLE | ECM_DISABLE )
  358. 10: CreateHead 建立传真页眉信息
  359. 11: Resolution 传真质量
  360. 12: From 发送者
  361. 13: To 接受者
  362. 14: hWnd 消息窗口句柄
  363. 15: Msg 消息ID (WM_SMARTFAX)
  364. ************************************************************************************/
  365. int _SmartSendFax(SmartFaxObj *hFax ,unsigned char nPort,const char *Tel,
  366.   const char *FaxFileName, const char *Identifi,EVolume Volume ,EFaxSpeed Speed,
  367.   EUsed2D Is2d,EErrorCorrect ECM,ECreateHead CreateHead,EResolution Resolution,
  368.   const char * From ,const char * Receiver,HWND hWnd,UINT Msg,int nStartPage);
  369. /**********************************************************************************
  370. 函数名:SmartSendFax
  371. 功能:发送传真文件
  372. 参数:
  373. 1: nPort 端口号
  374. 2: Tel 接受端号码
  375. 3: FaxFileName 传真文件名
  376. 4: Identifi     传真识别符(一般添入自己的传真号码)
  377. 5: Speed 传真需要的速度(default 96) 
  378. 6: Fclass CLASS TYPE (defualt Class 1)
  379. 7: Twodee 压缩方式(0 - 1D,1 - 2D defaul 1 ) 
  380. 8: ECM 纠错方式(defaul 1)
  381. 9: hWnd 接受传真消息的窗口句柄
  382. 9: Msg 传真消息
  383. 返回值:
  384.     0:     End if function completes successfully
  385. -1:     Exception error
  386. 101:    Failed to Open FAX file ~
  387. 102:    Couldn't conneced  within 35 secs of ATA command
  388. 103: Resevr
  389. 104:    Failed to send CSI frames 
  390. 105:    Failed to send DIS frames 
  391. 106:    Failed to send NFS frames 
  392. 107:    Failed to send other negotiating frames
  393. 108:    Failed to send CFR frames
  394. 109:    Failed to training
  395. 110:    Failed to send FTT frames
  396. 111:    Failed to set training speed  3 times
  397. 112:    Failed to send CRP frames
  398. 113:    Failed to dropped carrier within 5 s 
  399. 114:    Failed to respond to +FRM properly
  400. 115:    Failed to get modem data
  401. 116:    Failed to accept page data
  402.    201: Couldn't be found transmit file 
  403. 202: Transmit file isn't TIFF CLASS
  404. 203: Call isn't answered within 30 s
  405. 204: Machine can't receive fax data
  406. 205: Couldn't set +FTM
  407. 206: Couldn't set +FTM
  408. 210: NO DIALTONE
  409. 211: BUSY
  410. 212: NO ANSWER
  411. 213: NO CARRIER
  412. *******************************************************************************/
  413. // fax message for windows 
  414. #define WM_SMARTFAX WM_USER+101
  415. #define WM_FAXMISSIONINOVER 0x101
  416. #define WM_FAXCHANGESTATE 0x102
  417. #define WM_FAXSETCIS 0x103
  418. #define WM_FAXSETSPEED 0x104
  419. #define WM_FAXMISSIONOUTOVER 0x105
  420. #define WM_FAXRECVPAGEDATA 0x106
  421. #define WM_FAXSENDPAGEDATA 0x107
  422. #define WM_ACCEPTPAGE 0x108
  423. #define WM_REJECTPAGE 0x109
  424. #define WM_FAXSPEED 0x110
  425. #define WM_FAXPROCESSPAGEDATA 0x111
  426. #define WM_FAXUSERCANCE 0x112
  427. #define WM_FAXECM 0x113
  428. #define WM_FAXPAGE 0x114
  429. #define WM_FAXRING 0x115
  430. #define WM_FAXMONITORCLOSE 0x116
  431. #define WM_FAXMONITORSTART 0x117
  432. #define WM_FAXMONITORFAIL 0x118
  433. #define WM_FAXANI 0x119
  434. #define FAXINIT 0
  435. #define DIALFAX 1
  436. #define ANSWER 2
  437. #define NEGOTIATION 3
  438. #define TRAINING 4
  439. /*
  440. #ifdef  __cplusplus
  441. }
  442. #endif
  443. */
  444. #endif //__SMARTFAX_H_