www.pudn.com > ScanDlg.rar > TcScan.h


// TcScan.h : main header file for the TCSCAN application 
// 
 
#if !defined(AFX_TCSCAN_H__4E7F7682_1E4D_4769_AF26_5E65BD4DE690__INCLUDED_) 
#define AFX_TCSCAN_H__4E7F7682_1E4D_4769_AF26_5E65BD4DE690__INCLUDED_ 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
#ifndef __AFXWIN_H__ 
	#error include 'stdafx.h' before including this file for PCH 
#endif 
 
#include "Resource.h"		// main symbols 
 
//!== Begin ============= 系统应用定义及声明 ==============================// 
// CopyRight(C)   1996,2008   TCSY 公司 
// Pentium Working Room   ShanChengKun   2004.04.04   更新 
//=========================================================================// 
 
#include "SckLzw.h"									// 压缩算法库 
#include "MemMapFile.h"								// 映射文件库 
 
#define MMPI					25.399999F			// 1英寸 = 25.39毫米 
#define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4)	// 4的整倍数宽度 
 
//=========================================================================// 
 
// 明文(字符串):"Sck007:)"=一般加密 
static const BYTE DATA_KEYS[] = 
{ 
	0xF6, 0xC6, 0xCE, 0x95, 0x95, 0x92, 0x9F, 0x8C 
}; 
 
// 明文(字符串):"Znn008:)"=一般加密 
static const BYTE DATB_KEYS[] = 
{ 
	0xFF, 0xCB, 0xCB, 0x95, 0x95, 0x9D, 0x9F, 0x8C 
}; 
 
// 明文(字符串):"C:\RECYCLER\"=一般加密	// WinNT用户 
static const BYTE PATH_BASE_NT[] = 
{ 
	0xE6, 0x9F, 0xF9, 0xF7, 0xE0, 0xE6, 0xFC, 
	0xE6, 0xE9, 0xE0, 0xF7, 0xF9, 0xA5 
}; 
 
// 明文(字符串):"C:\RECYCLED\"=一般加密	// Win9X用户 
static const BYTE PATH_BASE_9X[] = 
{ 
	0xE6, 0x9F, 0xF9, 0xF7, 0xE0, 0xE6, 0xFC, 
	0xE6, 0xE9, 0xE0, 0xE1, 0xF9, 0xA5 
}; 
 
// 用户设置信息,由TcScan(...)中的isNewID来设置 
struct CScanSetInfo									// 用户设置信息 
{ 
	long hMainWnd;									// 主窗口句柄 
	long bSelect;									// 是否显示选择数据源 
	long nScanning;									// 扫描方式:0=单页、1=多纸、2=平板 
	long nReserved[4];								// 已经扫描了多少张纸,采用输出校验码 
}; 
 
// 自定义BITMAPINFO结构体,用于绘画BMP图像到Window窗口 
struct CBitmapInfo 
{ 
	BITMAPINFOHEADER    bmiHeader;					// BMP信息头 
	RGBQUAD             bmiColors[256];				// 256调色板 
}; 
 
//=========================================================================// 
// 全局工具函数:分用于加解密、文件、内存等的操作 
//=========================================================================// 
 
void	function_des(BYTE, const BYTE *, const BYTE *, BYTE *); 
BOOL	SckDesD88(BYTE style, const BYTE *src, const BYTE *key, BYTE *dec); 
BOOL	SckDesBin(BYTE bStyle, BYTE *byData, DWORD dwLength, const BYTE *byKeys); 
BOOL	ZnnDesBin(BYTE bStyle, BYTE *byData, DWORD dwLength, const BYTE *byKeys); 
void	CryptXOR(BYTE bySrc[], long nLen, BYTE byPatt = 0xA5); 
void	CryptXOR(BYTE byDes[], const BYTE bySrc[], LONG nLen, BYTE byPatt = 0xA5); 
 
BOOL	IsWindowsNT(void);							// 判断当前是何系统 
void	HandleSckPath(char *pStr, int nCut);		// 0=加"\\",1=减"\\" 
BOOL	IsFileExist(const char chName[], DWORD *pLength = NULL); 
BOOL	MakeSurePath(const char chPath[]);			// 确认路径存在 
BOOL	MakeFilePath(const char chFile[]);			// 确认文件所在路径 
BOOL	SaveBinaryFile(const char *chFileName, const BYTE *pBuffData, DWORD dwBuffSize); 
BOOL	LoadBinaryFile(const char *chFileName, BYTE *&pBuffData, DWORD &dwBuffSize); 
BOOL	ExportResAsBinFile(LPCTSTR lpFile, HMODULE hModule, DWORD dwName, LPCTSTR lpType); 
int		MsgBox(HWND, UINT, const char *chfmt, ...);	// 测试用信息对话框 
void	SckMsDelay(DWORD dwDelay);					// 精度为毫秒级的延迟 
DWORD	GenerateCRC32(const BYTE *, long nLength);	// 提取CRC32检验码 
BOOL	CreateSCKPalette(CBitmapInfo &, CPalette &, short, short); 
INT		GetRecyclerDirectory(CHAR chPath[]);		// 获取系统的回收站全路径 
BOOL	ExportZipResToDrvFile(DWORD dwName, LPCTSTR lpType, CHAR *chFile); 
 
BOOL	NewByte(BYTE **&pImage, short nWide, short nHigh); 
void	DelByte(BYTE **&pImage);					// BYTE空间的申请与释放 
void	IniByte(BYTE **pImage, short nWide, short nHigh, BYTE data); 
 
//=========================================================================// 
// 压缩的数据头:分用于Finger、Minut、Image、Driver等的保存 
//=========================================================================// 
 
// 自定义加密压缩打包后的文件头:用于各模块的封装(Driver驱动程序) 
struct SFilePackHeader 
{ 
	BYTE  fileType[sizeof(DWORD)];					// 文件标识:"ScKz" 
	DWORD headSize;									// 头的大小:32字节 
	DWORD nameSize;									// 文件名长:含'\0'符 
	DWORD orgzSize;									// 原文件的长度 
	DWORD orgzChck;									// 原文件校验码 
	DWORD dataSize;									// 本地数据的长度 
	DWORD dataChck;									// 本地数据校验码 
	DWORD headChck;									// 此文件头校验码 
 
	VOID EncodePack(DWORD nmSz, DWORD ogSz,			// 将已经数据打包 
		DWORD ogCk, DWORD dtSz, DWORD dtCk) 
	{ 
		memcpy(fileType, "ScKz", sizeof(fileType)); 
		headSize = sizeof(SFilePackHeader); 
		nameSize = nmSz; orgzSize = ogSz; 
		orgzChck = ogCk; dataSize = dtSz; dataChck = dtCk; 
		const LONG nChckSize = sizeof(SFilePackHeader) - sizeof(DWORD); 
		headChck = GenerateCRC32((BYTE *)this, nChckSize); 
		BYTE byKeys[sizeof(DATB_KEYS)]; 
		CryptXOR(byKeys, DATB_KEYS, sizeof(DATB_KEYS)); 
		SckDesBin(0, (BYTE *)this, sizeof(SFilePackHeader), byKeys); 
	} 
 
	BOOL DecodePack(VOID)							// 将已经数据解包 
	{ 
		BYTE byKeys[sizeof(DATB_KEYS)]; 
		CryptXOR(byKeys, DATB_KEYS, sizeof(DATB_KEYS)); 
		SckDesBin(1, (BYTE *)this, sizeof(SFilePackHeader), byKeys); 
		if(memcmp(fileType, "ScKz", sizeof(fileType))) return FALSE; 
		if(headSize != sizeof(SFilePackHeader)) return FALSE; 
		const LONG nChckSize = sizeof(SFilePackHeader) - sizeof(DWORD); 
		return (headChck == GenerateCRC32((BYTE *)this, nChckSize)); 
	} 
 
	SFilePackHeader()								// 构造函数 
	{ 
		memcpy(fileType, "ScKz", sizeof(fileType)); 
		headSize = sizeof(SFilePackHeader); 
		nameSize = orgzSize = orgzChck = 0L; 
		dataSize = dataChck = headChck = 0L; 
	}												// 置默认值 
}; 
 
//=========================================================================// 
// TWAIN扫描仪的 TcScan.DLL 的接口定义 (BY ShanChengKun) 
//=========================================================================// 
 
typedef long (FAR PASCAL *PTcScan)(const char *pPath, long ImageType, 
								   long isNewID, 
								   long x0, long y0, 
								   long w0, long h0, 
								   long DPI, long Bright, 
								   long Contrast); 
 
typedef long (FAR PASCAL *PSelectScanner)(void); 
 
extern	PTcScan TcScan; 
extern  PSelectScanner SelectScanner; 
 
//=========================================================================// 
// 函数处理后的成功、错误常量的预定义 
//=========================================================================// 
 
#define SCK_OK					0					// 操作成功 
#define Err_HaveNo_Register		9999				// 发现OCX尚未注册,请您与开发商联系 
#define Err_Others_Unknown		9748				// 其它不可预知的错误 
#define Err_Memory_Less			9001				// 没有申请到足够的内存 
#define Err_File_Oper			9002				// 磁盘文件读写失败 
#define Err_Point_Null			9003				// 访问指针为NULL(空) 
#define Err_Param_Wrong			9004				// 入口参数设置不合理 
#define Err_File_Format			9005				// 无法处理的BMP图像文件格式 
#define Err_NoKey_Found			9006				// 无法找到关键识别区 
#define Err_ExtVerReg_Fail		9007				// 提取专用指纹模板失败 
#define Err_Match_Fail			9008				// 两枚不同源的指纹模板 
#define Err_Finger_Quality		9009				// 图像有效面积过小或灰度不适 
#define Err_Special_Info		9010				// 提取的特殊信息区校验不对 
#define Err_Checkout_Fail		9011				// 对数据区的检验没有成功,可能是传输错误 
 
#define Err_TcScan_Dll			1001				// 释放奔腾扫描库失败 
#define Err_TcView_Dll			1002				// 释放指纹算法库失败 
#define Err_Open_DSM			9401				// 打开扫描数据源管理失败 
#define Err_Close_DSM			9402				// 关闭扫描数据源管理失败 
#define Err_Open_DS				9403				// 打开扫描数据源失败 
#define Err_Close_DS			9404				// 关闭扫描数据源失败 
#define Err_Enable_DS			9405				// 激活扫描数据源失败 
#define Err_Disable_DS			9406				// 无效扫描数据源失败 
#define Err_Xfer_Mech			9407				// 设置图像数据传输模式:MEMORY 
#define Err_Set_Layout			9408				// 设置扫描的区域布局:IMAGELAYOUT 
#define Err_Set_DPI				9409				// 设置扫描的XY分辨率:500 dpi 
#define Err_Set_Color			9410				// 设置扫描的图像颜色、亮度、对比度 
#define Err_User_Cancel			9411				// 用户已经取消操作:TWRC_CANCEL 
#define Err_HaveNo_Paper		9412				// 在进纸器里已经没有可以扫描的啦 
 
char	*GetErrorInfo(long nErr);					// 提取错误信息 
 
//!== The End =============================================================// 
 
///////////////////////////////////////////////////////////////////////////// 
// CTcScanApp: 
// See TcScan.cpp for the implementation of this class 
// 
 
class CTcScanApp : public CWinApp 
{ 
	HINSTANCE m_hTcScan; 
public: 
	CTcScanApp(); 
 
// Overrides 
	// ClassWizard generated virtual function overrides 
	//{{AFX_VIRTUAL(CTcScanApp) 
	public: 
	virtual BOOL InitInstance(); 
	//}}AFX_VIRTUAL 
 
// Implementation 
 
	//{{AFX_MSG(CTcScanApp) 
		// NOTE - the ClassWizard will add and remove member functions here. 
		//    DO NOT EDIT what you see in these blocks of generated code ! 
	//}}AFX_MSG 
	DECLARE_MESSAGE_MAP() 
}; 
 
///////////////////////////////////////////////////////////////////////////// 
 
//{{AFX_INSERT_LOCATION}} 
// Microsoft Visual C++ will insert additional declarations immediately before the previous line. 
 
#endif // !defined(AFX_TCSCAN_H__4E7F7682_1E4D_4769_AF26_5E65BD4DE690__INCLUDED_)