pid7823的设备,可修改debug.cfg文件name字段,选择对应的twain源才能打开该设备

This commit is contained in:
yangjiaxuan 2023-09-26 14:15:56 +08:00
parent e44b31b0c1
commit 710809cad1
2 changed files with 62 additions and 19 deletions

View File

@ -84,13 +84,13 @@ namespace callback
}SCNINST;
std::vector<SCNINST> g_scanner_instances;
int sane_event_callback( // 濞夈劌é<EFBFBD>žä»å´¶é<EFBFBD><EFBFBD>å‰<EFBFBD>殶é»ã„¥å«¬é¡•î†¾æŒéˆ½å¯ç¤‰é—å£å<EFBFBD>“é<EFBFBD>Ÿæšæ¤ç»»æ°±æ æµ£ç­åš‰é¸ãƒ§å<EFBFBD> é<EFBFBD>¨ç†¼å¼°é¡æ°¼æ¨ç¼<EFBFBD>æ<EFBFBD><EFBFBD>法鈻è©â¬ç°î˜¯é<EFBFBD>™å¿æƒƒ?
SANE_Handle hdev // 娴溠å®æ™¸å¨´æ»ƒîƒ„娆㈤惃é<EFBFBD>•î‡…啎婢跺洤褰çºå¼?
, int code // é¸ãƒ§å<EFBFBD> é<EFBFBD>¨ç†¸ç¦<EFBFBD>瀣â•î½å¨´ç…絿é<EFBFBD>?
, void* data // é¸ãƒ§å<EFBFBD> é<EFBFBD>¨ç†¸ç¦<EFBFBD>瀣â•î½éºä½ºå¢—宓侀æ•<EFBFBD>ç<EFBFBD>žå‰§å£Œé¹è¯¡å•ç»¨ã„¦ç¦é<EFBFBD>ˆé<EFBFBD>æ•©é»î†»ç„¦å©€ä¾€å¹<EFBFBD>鈧î„<EFBFBD>稉宥å®å€±é¿æ¶˜è¯å¯®î„„æ¡è¤<EFBFBD>é<EFBFBD>™æŒŽæ…鎾茬çšå¨´çŠºæ³é<EFBFBD>£ç¬ç¨Š?
, unsigned int* len // éºä½ºå¢—宓侀梹é<EFBFBD>¨î†¼î†Šé¿æ¶˜ç‰†é<EFBFBD>¡Ñ‡æ‡žé<EFBFBD>Œï¸¾ç¤†é¿æ¶˜æœ¬é<EFBFBD>¨ã„©æ‡“é<EFBFBD>—æ<EFBFBD>¦ent_dataé»ã„¥å«®ç»±ï¹å´˜éŽ»æŽéš˜é—â¬é<EFBFBD>¨î†¼î†Šé¿æ¶˜çŸ<EFBFBD>顕涚ç´é<EFBFBD>¡æ°¼åšžé»î<EFBFBD>„娴å¤æƒ”é<EFBFBD>ƒå畱娴滃娆㈡ç¦é”<EFBFBD>å©åž?
, void* param // é»î<EFBFBD>¬åŠ<EFBFBD>é<EFBFBD>©æ¶¢æ‡é¡<EFBFBD>å­æš°å¨æ¿î˜°é<EFBFBD>†ç†¼å¹é¡•å—™ç¤‰å¨æ³æ°¦é<EFBFBD>¨ç†¼æ½éˆºç—ne_init_ex娴è©å§´é<EFBFBD>™å—å¼®é<EFBFBD>“佹畱娣å¨ç¹ƒç€µæ—€ç¨‰éˆ§î„„æ‡?
) // é<EFBFBD>‰â•æŸ¨å¨²æ ­å´<EFBFBD>é—寸贩å¨æ³ç§´éŽ®æ»æƒƒé<EFBFBD>•î<EFBFBD>†çšå¨´çŠ³æ¹¹é<EFBFBD>žî„„æƒ<EFBFBD>浣解å<EFBFBD>“ç<EFBFBD>žç•Œæš°é¿æ¶˜çŸéˆ§î„<EFBFBD>艾é<EFBFBD>舵稉ç<EFBFBD>♀å<EFBFBD>?é–?
int sane_event_callback( // 婵炲鍔岄崬浠嬪炊閻愬墎娈堕柣銊ュ椤曨喚鎸掗埥鍛闂傚洠鍋撻悷鏇氭缁绘氨鎷犳担绛嬪殙闁搞儳鍋犻惃鐔煎及椤栨凹妯嬬紒鎹愭硶閳昏偐鈧懓顦崣蹇涙儍?
SANE_Handle hdev // 濞存籂鍛櫢濞存粌顑勫▎銏ゆ儍閸曨噮鍟庡璺烘搐瑜扮偤寮?
, int code // 闁搞儳鍋犻惃鐔哥鐎b晜顐藉ù鐙呯悼閻?
, void* data // 闁搞儳鍋犻惃鐔哥鐎b晜顐介柡浣哄瀹撲線鏁嶇仦鍓у闁硅鍠曠花銊︾閺堥潧鏁╅柣顔荤劍濠€渚€骞嶉埀顒佺▔瀹ュ懏鍊遍柨娑樿嫰瀵剟鎮¤閸欐寧鎷呴幘鑼殤濞寸姾娉涢悾鐐▕?
, unsigned int* len // 闁轰胶澧楀畵渚€姊归崹顔碱唺闁挎稑鐗嗛悺褔鎳為崒锔剧闁挎稑鏈崹銊╂嚀閸楁仸ent_data闁汇劌瀚槐锕傚礃閹绘帒闅橀梻鈧崹顔碱唺闁挎稑鐭侀娑氱磼閸℃凹鍤為柣顏勵儑濞村鎯旈弮鍌涚暠濞存粌顑勫▎銏閿濆洨鍨?
, void* param // 闁活潿鍔嶉崺娑㈡嚊椤忓嫮鏆板☉鏂款槹閺嗙喖骞戦鍡欑濞戞挸姘﹂惃鐔兼偨閳虹棏ne_init_ex濞磋偐濮撮崣鍡涘籍閸撲焦鐣卞ǎ鍥ㄧ箖鐎垫梹绋夐埀顒勬嚊?
) // 閺夆晜鏌ㄥú鏍磹闂傚璐╁☉鎾崇Т閹捇鎯冮崟顏嗙殤濞寸姵婀归崬顒勬儘娴hВ鍋撶仦鐣屾毎闁挎稑鐭傞埀顒佽壘閻栬埖绋夌悰鈾€鍋?闁?
{
std::lock_guard<std::mutex> lock(cb_lock_);
std::vector<SCNINST>::iterator it = std::find(g_scanner_instances.begin(), g_scanner_instances.end(), hdev);
@ -207,10 +207,10 @@ namespace callback
, {SANE_STD_OPT_NAME_COLOR_CORRECTION , OPTION_TITLE_SPJZ}
, {SANE_STD_OPT_NAME_DISCARDBLANK , OPTION_TITLE_TGKBY}
},
g_discard[] = { {SANE_STD_OPT_NAME_REVERSE_01 , "\351\273\221\347\231\275\345\233\276\345\203\217\345\217\215\350\211\262\350\276\223\345\207\272\357\274\210\346\255\243\345\270\270\351\242\234\350\211\262\344\270\272\357\274\2320-\351\273\221\350\211\262\357\274\2331-\347\231\275\350\211\262\357\274\211"} // å§æ¶™åž¹å¨…ч崶鎯у剼é¸æ¬<EFBFBD>秷澹婃æ½<EFBFBD>鎾冲毉é¿æ¶˜ç‰Šé¡æ»…敮鎼侇æ<EFBFBD>¹é¼ç¡…弓ç<EFBFBD>熼æ•?-å§æ¶™åž¼æ¾¹å©‡æ•<C3A6>?-é»Ñƒâ¬ç†·î—<C3AE>é?
, {SANE_STD_OPT_NAME_FILTER , "\347\201\260\345\272\246\346\210\226\351\273\221\347\231\275\345\233\276\345\203\217 - \351\231\244\350\211\262"} // é»å¿”澘瀹抽å¹é<EFBFBD><EFBFBD>î… æ¨é»Ñ†æ£„娴橀å´?- 闂勩倛澹?
, {SANE_STD_OPT_NAME_IS_AUTO_FEED_STRENGTH , "\350\207\252\345\212\250\346\220\223\347\272\270\345\274\272\345\272\246"} // é¼å¥‰äºœæ¿®â•…å¹éŽ¾å‰<EFBFBD>剨瀵æ<EFBFBD>«ç€?
, {SANE_STD_OPT_NAME_FEED_STRENGTH_VALUE , "\346\220\223\347\272\270\351\230\210\345\200\274"} // " é¹å…¼æŒ¾é<EFBFBD>婇梼é<EFBFBD>«æ¿ƒå<EFBFBD>?
g_discard[] = { {SANE_STD_OPT_NAME_REVERSE_01 , "\351\273\221\347\231\275\345\233\276\345\203\217\345\217\215\350\211\262\350\276\223\345\207\272\357\274\210\346\255\243\345\270\270\351\242\234\350\211\262\344\270\272\357\274\2320-\351\273\221\350\211\262\357\274\2331-\347\231\275\350\211\262\357\274\211"} // 濮掓稒鍨瑰▍褔宕堕幆褍鍓奸柛娆忕Х婢瑰﹥娼忛幘鍐叉瘔闁挎稑鐗婇婊呮暜閹间緡鏉归柤纭呭紦鐠愮喖鏁?-濮掓稒鍨兼竟濠囨晬?-闁谎冣偓鐔奉棌闁?
, {SANE_STD_OPT_NAME_FILTER , "\347\201\260\345\272\246\346\210\226\351\273\221\347\231\275\345\233\276\345\203\217 - \351\231\244\350\211\262"} // 闁诲繑婢樼€规娊骞嬮弽顓犳嫧闁谎嗘濞存﹢宕?- 闂傚嫨鍊涙竟?
, {SANE_STD_OPT_NAME_IS_AUTO_FEED_STRENGTH , "\350\207\252\345\212\250\346\220\223\347\272\270\345\274\272\345\272\246"} // 闁煎浜滄慨鈺呭箹閹惧墎鍓ㄧ€殿喖鎼€?
, {SANE_STD_OPT_NAME_FEED_STRENGTH_VALUE , "\346\220\223\347\272\270\351\230\210\345\200\274"} // " 闁瑰吋鎸鹃悞濠囨⒓閸績鍋?
};
const char* option_title_2_name(const char* title)
{
@ -347,12 +347,12 @@ namespace callback
// SANE_EVENT_IMAGE_OK - void* unused, be NULL, flag - unused, be 0
static HMODULE hui = NULL;
int (*choose_scanner)(const std::vector<DEVQUEUI>& devs) = NULL; // blocked. return selected DEVQUE::id or -1 if user cancelled
char* (*apply_current_config)(const char* dev_name, SANE_Handle device, LPSANEAPI api) = NULL; // 鎼存梻é<EFBFBD><EFBFBD>ã‡æ鎯ь槵é»ã„¥å«¬ç¼<EFBFBD>嬮崜宥夊帳é¿?
char* (*apply_current_config)(const char* dev_name, SANE_Handle device, LPSANEAPI api) = NULL; // 閹煎瓨姊婚弫銈囨媼閹屾У闁汇劌瀚紞瀣礈瀹ュ甯抽柨?
int (*show_setting_ui)(SANE_Handle device, HWND parent, LPSANEAPI api, const char* devname, bool with_scan, std::function<void(ui_result)> callback) = NULL;
int (*show_progress_ui)(HWND parent, std::function<void(ui_result)> callback, std::function<void(int/*event*/, void*/*msg*/, int/*flag*/)>* notify) = NULL;
int (*show_messagebox_ui)(HWND parent, int event, void* msg, int flag) = NULL;
int (*close_ui)(int) = NULL;
int (*apply_given_config)(const char* content, SANE_Handle device, LPSANEAPI api) = NULL; // 鎼存梻é<EFBFBD><EFBFBD>ã‰å¹<EFBFBD>é<EFBFBD>¥Ñ…æš°é»ã„¥å«°é<EFBFBD>˜ã‡ç´”顕嗙礉contentå¨æ´æ¤½é<EFBFBD>˜ã‡ç´”顔芥殶é¹è¯¡å—ç»?
int (*apply_given_config)(const char* content, SANE_Handle device, LPSANEAPI api) = NULL; // 閹煎瓨姊婚弫銈夊箰閸パ呮毎闁汇劌瀚伴崢銈囩磾椤曞棛绀塩ontent濞戞挻妞介崢銈囩磾椤旇姤娈堕柟璇″枟缁?
char* (*get_config_content)(const char* dev_name, const char* name) = NULL;
void (*twain_ui_free)(void* buf) = NULL;
@ -555,6 +555,38 @@ scanner::~scanner()
}
}
std::string scanner::getDeviceType()
{
std::string cfgPath("");
std::string env("LOCALAPPDATA");
cfgPath = getenv(env.c_str());
cfgPath += "\\";
#ifdef OEM_HANWANG
cfgPath += "HanvonScan";
#elif defined(OEM_LISICHENG)
cfgPath += "LanxumScan";
#elif defined(OEM_CANGTIAN)
cfgPath += "CumTennScan";
#elif defined(OEM_ZHONGJING)
cfgPath += "MicrotekScan";
#elif defined(OEM_ZIGUANG)
cfgPath += "UniScan";
#elif defined(OEM_DELI)
cfgPath += "DeliScan";
#elif defined(OEM_NEUTRAL)
cfgPath += "NeuScan";
#else
cfgPath += "HuaGoScan";
#endif
char devType[256] = { 0 };
cfgPath += "\\config\\debug.cfg";
GetPrivateProfileStringA("devs_name", "name", NULL, devType, 256, cfgPath.c_str());
return devType;
}
bool scanner::is_belong_serial(int vid, int pid, SCANNERID serial)
{
if (vid == PRODUCT_VENDOR_HG)
@ -588,7 +620,17 @@ bool scanner::is_belong_serial(int vid, int pid, SCANNERID serial)
}
else if (vid == PRODUCT_VENDOR_HG1)
{
return pid == 0x7823 && GET_SCANNER_VID(serial) == PRODUCT_VENDOR_HG && GET_SCANNER_PID(serial) == 0x200;
std::string devType = getDeviceType();
int devPid = 0x200;
if (!devType.empty())
{
if (devType == "G300")
devPid = 0x300;
else if (devType == "G400")
devPid = 0x400;
}
int a = GET_SCANNER_VID(serial);
return pid == 0x7823 && GET_SCANNER_VID(serial) == PRODUCT_VENDOR_HG && (GET_SCANNER_PID(serial) == devPid);
}
else if (vid == PRODUCT_VENDOR_HW)
{
@ -991,7 +1033,7 @@ int scanner::open(void)
{
if (callback::show_messagebox_ui)
{
// ç¼<EFBFBD>ç¬ç“•é<EFBFBD>¤å—å¹éŽ¾å‰<EFBFBD>剨濞å—<EFBFBD>å‰<EFBFBD>é<EFBFBD>†ç†·î†<EFBFBD>é¼å‰<EFBFBD>Тé<EFBFBD>‰â•<EFBFBD>æ´©é¡”æ æ鈥æ<EFBFBD>â<EFBFBD>é»î<EFBFBD>¬åŠ<EFBFBD>瀵栭崶æ<EFBFBD>ˆå‰§ç¤‰é¹æ®¿å<EFBFBD>…寮挎潻é<EFBFBD>¥â”¾æŸ¤å¨æ“ƒåŽ½éŽ®ï¼„ç—ªç»è£¤äº¼é<EFBFBD> æ„©å„¯éˆ§îƒ¿ç„¦é¡ï½‰å¼¬å©§åº“å<EFBFBD>“浣规å<EFBFBD>婢舵艾绱å‰<EFBFBD>粵澶婄磽é<EFBFBD>¢îˆæ顣跺âŽéˆ¥å†²è®²é¼è™«åž<EFBFBD>绱伴弰æ<EFBFBD>´ãˆ¡â”婢хå<EFBFBD>顦å<EFBFBD>—æ•<EFBFBD>宀冾嚞濞夈åŠ<EFBFBD>é<EFBFBD>“伴崣濠冩濞æ³æ‡<EFBFBD>纾ラ妴浣歌嫙é¼è¾¨æ¢»é®å¯¸æ鎯ь槵娓氭ç¨ç»¨æŸ¥å´¯é<EFBFBD>¡æ°¬æž å¨æ—増娴涢å¹éŠ<EFBFBD>㈢剨é<EFBFBD>‰çƒ†å™¯ç»±?
// 缂佺偓鐡曢悿鍡涘箹閹惧墎鍓ㄦ繛鍡忓墲閺嗙喎顔忛懠鍓佇㈤弶鈺佹穿椤旀洜鎷嬮垾鎻掆枏闁活潿鍔忕€垫牠宕舵潏鍓х闁规鍋呭鎸庢交閸モ斁鏌ゅ☉鎿冨幗閹紕鐥粙瑁や杭閻犳劑鍎埀顑跨劍椤掞綁寮┃搴撳亾娴h鍋傚鑸佃壘缁卞墎绮垫径濠勭=閻㈩垱鎮傞。璺衡枎閳ュ啿璁查柤铏灊缁变即寮版惔銏♀枖濠⒀呭仜椤﹀潡鏁嶅畝鍐惧殲婵炲鍔嶉崜浼村矗婵犲啯顦ф繛鎾虫噺绾俱儵濡存担姝屽珯闁艰鲸姊婚柈瀵告媼閹屾У濞撴碍绋戠花鏌ュ疮閸℃艾鏋犲☉鏃傚濞存盯骞戦姀銏㈠墾閺夌儐鍣槐?
std::wstring roller_msgw(local_trans::lang_trans_between_hz936(L"\u7EB8\u8F6E\u6413\u7EB8\u6B21\u6570\u5DF2\u8D85\u8FC7\u8BBE\u8BA1\u4F7F\u7528\u8303\u56F4\uFF0C\u626B\u63CF\u8FC7\u7A0B\u4E2D\u6413\u7EB8\u5931\u8D25\u3001\u6B6A\u659C\u3001\u6413\u591A\u5F20\u7B49\u5F02\u5E38\u9891\u6B21\u53EF\u80FD\u4F1A\u660E\u663E\u589E\u591A\uFF0C\u8BF7\u6CE8\u610F\u53CA\u65F6\u6E05\u6D01\u3001\u5E76\u8054\u7CFB\u8BBE\u5907\u4F9B\u5E94\u5546\u8D2D\u4E70\u66FF\u6362\u7EB8\u8F6E\uFF01"));
std::string roller_msg(local_trans::u2a(roller_msgw.c_str(), CP_UTF8));
app_wnd_ = callback::find_main_wnd();
@ -1208,7 +1250,7 @@ int scanner::init_options_id(void)
if (is_erase_hole_id_ == -1)
{
// é¸å¿•åŽ§é¡”愰懓浣烘畱é—å©å€•é<EFBFBD>¡ç†ºç²»å¦¤ä½ºã€?
// 闁稿繒鍘ч鎰版嚀娴g儤鐣遍梻鍕╁€曢悺鐔虹不濡や胶銆?
EXAPI ea;
ea.ind = is_erase_hole_id_ = ex_id_++;
@ -3562,13 +3604,13 @@ int scanner::handle_device_event(int ev_code, void* data, unsigned int* len)
log_info(msg, 1);
}
}
//else if (ev_code == SANE_EVENT_ERROR) // é<EFBFBD><EFBFBD>ç²ç¹—é<EFBFBD>â¬é¿æ¶˜è¯å©€î<EFBFBD>ˆå´å©Šåµå‰¾é¹æ®¿å<EFBFBD>…寮å<EFBFBD>—å¼®çºè™¹æ½”ç¼<EFBFBD>â¬æ<EFBFBD>žé¢<EFBFBD>繆é¹?- 2023-05-30
//else if (ev_code == SANE_EVENT_ERROR) // 閻忕偛绻楅弬鈧柨娑樿嫰濠€顏堝磻濠婂嫷鍓鹃柟娈垮亝瀵潡寮捄铏规綌缂佲偓鏉為绻嗛柟?- 2023-05-30
//{
// if (callback::show_messagebox_ui && *len)
// {
// callback::show_messagebox_ui(app_wnd_, ev_code, (void*)data, 0);
// }
// else if (*len) //é—<EFBFBD>挎ç¨é¡•ã…é<EFBFBD>Ÿæ<EFBFBD>¿æ¯?
// else if (*len) //闂佹寧鐟ㄩ銈咁嚕閻熸澘姣?
// {
// std::wstring msg(local_trans::a2u((char*)data, CP_UTF8));
// if (!IsWindow(app_wnd_))

View File

@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "scanned_img.h"
#include <vector>
@ -198,6 +198,7 @@ protected:
~scanner();
public:
static std::string getDeviceType();
static bool is_belong_serial(int vid, int pid, SCANNERID serial);
static void get_scanner_name(SCANNERID id, std::vector<std::string>& names);
static value_type from_sane_type(SANE_Value_Type type);