⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcscan.h

📁 通用的扫描仪测试接口
💻 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_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -