?? 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 + -