📄 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_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -