From 51c732c0082b94cede28fe3f13ca06b5d4027c6c Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Tue, 16 May 2023 15:25:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=AB=E6=8F=8F=E4=BB=AA=E4=BA=8B=E4=BB=B6?= =?UTF-8?q?=E7=9B=B4=E6=8E=A5=E5=9B=9E=E8=B0=83=E5=88=B0APP=EF=BC=8C?= =?UTF-8?q?=E4=B8=8D=E5=86=8D=E4=BE=9D=E8=B5=96APP=E8=B0=83=E7=94=A8?= =?UTF-8?q?=EF=BC=9B=E8=AE=BE=E7=BD=AE=E7=95=8C=E9=9D=A2=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E6=89=AB=E6=8F=8F=E6=B5=81=E7=A8=8B=E6=B7=BB=E5=8A=A0notifyXfe?= =?UTF-8?q?rReady=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sane/scanner.cpp | 16 +++++- twain/twain/huagaods.cpp | 109 ++++++++++++++++++++------------------- 2 files changed, 71 insertions(+), 54 deletions(-) diff --git a/sane/scanner.cpp b/sane/scanner.cpp index a04f3d0..eb95a33 100644 --- a/sane/scanner.cpp +++ b/sane/scanner.cpp @@ -717,6 +717,18 @@ void scanner::on_ui_event(int uev, void* sender) { is_scanning_ = false; } + int(__stdcall * h)(int, void*) = scanner_ev_handler_; + if (uev == SANE_EVENT_UI_CLOSE_CANCEL) // notify when following message SANE_EVENT_SCAN_FINISHED arrived + { + stop(); + if (indicator_.get()) + indicator_.reset(); + } + else if (h) + { + h(uev, evh_param_); + } + return; events_.save(uev, sizeof(uev)); @@ -3170,7 +3182,7 @@ COM_API_IMPLEMENT(scanner, bool, ui_show_progress(HWND parent, bool bIndicator)) { callback::show_progress_ui(parent, ui_process,&ui_notify); } - else + else if(bIndicator) { if (setting_.get() && IsWindowVisible(setting_->hwnd())) parent = setting_->hwnd(); @@ -3304,7 +3316,7 @@ int scanner::handle_device_event(int ev_code, void* data, unsigned int* len) callback::bring_message_box_topmost(local_trans::lang_trans_between_hz936(CONST_STRING_ERROR).c_str()); MessageBoxW(app_wnd_, msg.c_str(), local_trans::lang_trans_between_hz936(CONST_STRING_ERROR).c_str(), MB_OK); } - on_ui_event(ev_code, (void*)ev_code); + // on_ui_event(ev_code, (void*)ev_code); } return 0; diff --git a/twain/twain/huagaods.cpp b/twain/twain/huagaods.cpp index c82a3c8..ee8fb74 100644 --- a/twain/twain/huagaods.cpp +++ b/twain/twain/huagaods.cpp @@ -911,13 +911,13 @@ Result huagao_ds::capabilitySet(const Identity& origin, Capability& data) Result huagao_ds::eventProcess(const Identity&, Event& event) { const MSG* msg = (const MSG*)event.event(); - if (scanner_.get()) - { - int ev = scanner_->get_event(); - - if(ev) - handle_scanner_event(ev); - } + //if (scanner_.get()) + //{ + // int ev = scanner_->get_event(); + // + // if(ev) + // handle_scanner_event(ev); + //} event.setMessage(Msg::Null); @@ -1009,6 +1009,7 @@ Result huagao_ds::identityCloseDs(const Identity&) if (scanner_.get()) { scanner_->set_event_callback(); + scanner_->ui_hide(); scanner_.reset(); } if (singleton_) @@ -1574,41 +1575,41 @@ Result huagao_ds::call(const Identity& origin, DataGroup dg, Dat dat, Msg msg, v static unsigned nested_events = 0; bool calling = in_calling; - if (calling) - { - wchar_t buf[128] = { 0 }, dgs[20] = { 0 }, dts[20] = { 0 }, ms[20] = { 0 }, ss[20] = { 0 }, rcs[20] = { 0 }, cs[20] = { 0 }; - - if (dg == DataGroup::Control && dat == Dat::Event && msg == Msg::ProcessEvent) - { - if (is_getting_count_ && scanner_status_ == SCANNER_STATUS_SCAN_1) - { - // let it go ... - } - else - { - if(nested_events == 0) - load_sane_util::log_info(L"Nested Call: discard 'Msg::ProcessEvent'!\r\n", 0); - nested_events++; - return { ReturnCode::NotDsEvent, ConditionCode::Success }; - } - } - else - { - swprintf_s(buf, _countof(buf) - 1, L"Nested Call: [%x - %s]DSEntry(%s, %s, %s) called in another operation! \r\n", GetCurrentThreadId(), desc_state(state(), ss), - desc_data_group(dg, dgs), desc_data(dat, dts), desc_msg(msg, ms)); - load_sane_util::log_info(buf, 0); - } - } - else - { - in_calling = true; - } - if (nested_events > 1) - { - wchar_t buf[256] = { 0 }; - swprintf_s(buf, _countof(buf) - 1, L"Discard %u nested Msg::ProcessEvent messages before.\r\n", nested_events); - load_sane_util::log_info(buf, 0); - } + //if (calling) + //{ + // wchar_t buf[128] = { 0 }, dgs[20] = { 0 }, dts[20] = { 0 }, ms[20] = { 0 }, ss[20] = { 0 }, rcs[20] = { 0 }, cs[20] = { 0 }; + // + // if (dg == DataGroup::Control && dat == Dat::Event && msg == Msg::ProcessEvent) + // { + // if (is_getting_count_ && scanner_status_ == SCANNER_STATUS_SCAN_1) + // { + // // let it go ... + // } + // else + // { + // if(nested_events == 0) + // load_sane_util::log_info(L"Nested Call: discard 'Msg::ProcessEvent'!\r\n", 0); + // nested_events++; + // return { ReturnCode::NotDsEvent, ConditionCode::Success }; + // } + // } + // else + // { + // swprintf_s(buf, _countof(buf) - 1, L"Nested Call: [%x - %s]DSEntry(%s, %s, %s) called in another operation! \r\n", GetCurrentThreadId(), desc_state(state(), ss), + // desc_data_group(dg, dgs), desc_data(dat, dts), desc_msg(msg, ms)); + // load_sane_util::log_info(buf, 0); + // } + //} + //else + //{ + // in_calling = true; + //} + //if (nested_events > 1) + //{ + // wchar_t buf[256] = { 0 }; + // swprintf_s(buf, _countof(buf) - 1, L"Discard %u nested Msg::ProcessEvent messages before.\r\n", nested_events); + // load_sane_util::log_info(buf, 0); + //} nested_events = 0; try { @@ -1616,7 +1617,7 @@ Result huagao_ds::call(const Identity& origin, DataGroup dg, Dat dat, Msg msg, v //FileTools::write_log("D:\\1.txt", "call:datagroup-"+to_string((int)dg)+"dat-"+to_string(int(dat))+"msg-"+to_string(int(msg))); Result rt; - trigger_ProcessEvent(dg, dat, msg); // some APPs may be not trigger (Control, Event, ProcessEvent), we help them :( ... // 云阅卷扫描端不等状态改变,直接取图,此处设置一次状态 2022-11-07 + //trigger_ProcessEvent(dg, dat, msg); // some APPs may be not trigger (Control, Event, ProcessEvent), we help them :( ... // 云阅卷扫描端不等状态改变,直接取图,此处设置一次状态 2022-11-07 rt = Base::call(origin, dg, dat, msg, data); if (log_all_triple_ || ((int)rt.returnCode() && rt.returnCode() != ReturnCode::NotDsEvent)) @@ -3555,16 +3556,16 @@ int huagao_ds::handle_scanner_event(int ev, bool from_event_proc) { case SANE_EVENT_WORKING: scanner_status_ = SCANNER_STATUS_SCANNING; - rc = notifyXferReady(); - if (!Twpp::success(rc)) - { - wchar_t msg[128] = { 0 }; - swprintf_s(msg, _countof(msg) - 1, L"[%x]Warning: change state to XferReady failed with error %d while in state(%d), STOP scanning ...\r\n", GetCurrentThreadId(), rc, state()); - load_sane_util::log_info(msg, 0); + //rc = notifyXferReady(); + //if (!Twpp::success(rc)) + //{ + // wchar_t msg[128] = { 0 }; + // swprintf_s(msg, _countof(msg) - 1, L"[%x]Warning: change state to XferReady failed with error %d while in state(%d), STOP scanning ...\r\n", GetCurrentThreadId(), rc, state()); + // load_sane_util::log_info(msg, 0); - // we stop scanning here ... - scanner_->stop(); - } + // // we stop scanning here ... + // scanner_->stop(); + //} break; case SANE_EVENT_UI_CLOSE_CANCEL: scanner_->stop(); @@ -3615,6 +3616,10 @@ int huagao_ds::handle_scanner_event(int ev, bool from_event_proc) load_sane_util::log_info(msg, 0); } } + else + { + notifyXferReady(); // scan from UI, should notify this state mannually + } break; }