From 710809cad1051b7980dc0269bf3a356cdad77d6e Mon Sep 17 00:00:00 2001 From: yangjiaxuan <171295266@qq.com> Date: Tue, 26 Sep 2023 14:15:56 +0800 Subject: [PATCH] =?UTF-8?q?pid7823=E7=9A=84=E8=AE=BE=E5=A4=87=EF=BC=8C?= =?UTF-8?q?=E5=8F=AF=E4=BF=AE=E6=94=B9debug.cfg=E6=96=87=E4=BB=B6name?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=EF=BC=8C=E9=80=89=E6=8B=A9=E5=AF=B9=E5=BA=94?= =?UTF-8?q?=E7=9A=84twain=E6=BA=90=E6=89=8D=E8=83=BD=E6=89=93=E5=BC=80?= =?UTF-8?q?=E8=AF=A5=E8=AE=BE=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sane/scanner.cpp | 78 +++++++++++++++++++++++++++++++++++++----------- sane/scanner.h | 3 +- 2 files changed, 62 insertions(+), 19 deletions(-) diff --git a/sane/scanner.cpp b/sane/scanner.cpp index c466197..c6c878e 100644 --- a/sane/scanner.cpp +++ b/sane/scanner.cpp @@ -84,13 +84,13 @@ namespace callback }SCNINST; std::vector g_scanner_instances; - int sane_event_callback( // 濞夈劌鍞介崶鐐剁殶閻ㄥ嫬顕挒鈽呯礉闂団偓鐟曚椒绻氱拠浣筋嚉閸ョ偠鐨熼弰顖氼樋缁捐法鈻肩€瑰鍙忛惃? - SANE_Handle hdev // 娴溠呮晸娴滃娆㈤惃鍕啎婢跺洤褰為? - , int code // 閸ョ偠鐨熸禍瀣╂娴狅絿? - , void* data // 閸ョ偠鐨熸禍瀣╂閺佺増宓侀敍灞剧壌閹诡喕绨ㄦ禒鏈靛敩閻焦婀侀幍鈧稉宥呮倱閿涘苯寮悡褍鍙挎担鎾茬皑娴犺泛鐣炬稊? - , unsigned int* len // 閺佺増宓侀梹鍨閿涘牆鐡ч懞鍌︾礆閿涘本鍨ㄩ懓鍗恦ent_data閻ㄥ嫮绱﹂崘鎻掑隘闂€鍨閿涘矁顕涚紒鍡氼嚞閻娴夋惔鏃傛畱娴滃娆㈡禒锝囩? - , void* param // 閻劍鍩涢懛顏勭暰娑斿鏆熼幑顕嗙礉娑撳氦鐨熼悽鈺痑ne_init_ex娴肩姴鍙嗛弮鍓佹畱娣囨繃瀵旀稉鈧懛? - ) // 鏉╂柨娲栭崐闂寸贩娑撳秴鎮撻惃鍕皑娴犳湹鍞惍浣解偓灞界暰閿涘矂鈧艾鐖舵稉琛♀?? + 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 lock(cb_lock_); std::vector::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"} // 姒涙垹娅ч崶鎯у剼閸欏秷澹婃潏鎾冲毉閿涘牊顒滅敮鎼侇杹閼硅弓璐熼?-姒涙垼澹婇敍?-閻у€熷? - , {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"} // " 閹兼挾鐒婇梼鍫濃? + 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& 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; // 鎼存梻鏁ょ拋鎯ь槵閻ㄥ嫬缍嬮崜宥夊帳閿? + 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 callback) = NULL; int (*show_progress_ui)(HWND parent, std::function callback, std::function* 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; // 鎼存梻鏁ら幐鍥х暰閻ㄥ嫰鍘ょ純顕嗙礉content娑撴椽鍘ょ純顔芥殶閹诡喗? + 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) { - // 缁炬瓕鐤嗛幖鎾剁剨濞嗏剝鏆熷鑼剁Т鏉╁洩顔曠拋鈥插▏閻劏瀵栭崶杈剧礉閹殿偅寮挎潻鍥┾柤娑擃厽鎮$痪绋裤亼鐠愩儯鈧焦顒i弬婧库偓浣规偂婢舵艾绱剁粵澶婄磽鐢悂顣跺▎鈥冲讲閼虫垝绱伴弰搴㈡▔婢х偛顦块敍宀冾嚞濞夈劍鍓伴崣濠冩濞撳懏纾ラ妴浣歌嫙閼辨梻閮寸拋鎯ь槵娓氭稑绨查崯鍡氬枠娑旂増娴涢幑銏㈢剨鏉烆噯绱? + // 缂佺偓鐡曢悿鍡涘箹閹惧墎鍓ㄦ繛鍡忓墲閺嗙喎顔忛懠鍓佇㈤弶鈺佹穿椤旀洜鎷嬮垾鎻掆枏闁活潿鍔忕€垫牠宕舵潏鍓х闁规鍋呭鎸庢交閸モ斁鏌ゅ☉鎿冨幗閹紕鐥粙瑁や杭閻犳劑鍎埀顑跨劍椤掞綁寮┃搴撳亾娴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) { - // 閸忕厧顔愰懓浣烘畱闂勩倕鐡熺粻妤佺? + // 闁稿繒鍘ч鎰版嚀娴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) // 鐏炲繗鏂€閿涘苯婀崑婊勵剾閹殿偅寮块弮璺虹潔缁€杞颁繆閹?- 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) //闁挎瑨顕ゅ鐟板? + // else if (*len) //闂佹寧鐟ㄩ銈咁嚕閻熸澘姣? // { // std::wstring msg(local_trans::a2u((char*)data, CP_UTF8)); // if (!IsWindow(app_wnd_)) diff --git a/sane/scanner.h b/sane/scanner.h index e3bcf63..b48a05c 100644 --- a/sane/scanner.h +++ b/sane/scanner.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include "scanned_img.h" #include @@ -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& names); static value_type from_sane_type(SANE_Value_Type type);