diff --git a/twain/twain/huagaods.cpp b/twain/twain/huagaods.cpp index 1d9fcb7..e3dc2fd 100644 --- a/twain/twain/huagaods.cpp +++ b/twain/twain/huagaods.cpp @@ -911,7 +911,7 @@ 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()) + //if (scanner_.get() && show_setting_) //{ // int ev = scanner_->get_event(); // @@ -1027,7 +1027,7 @@ Result huagao_ds::pendingXfersGet(const Identity&, PendingXfers& data) if (!scanner_.get()) return seqError(); - // 显示设置界面时,不能阻塞在EndXfer,否则最后一张图片传输后显示不出来,故此处将原来-1的参数改为不等待?。显示设置界面时直接返回有图? + // ʾýʱEndXferһͼƬʾڴ // int cnt = get_scanned_image_count(-1); int cnt = show_setting_ ? 1 : get_scanned_image_count(-1); data.setCount(cnt); @@ -1636,8 +1636,24 @@ Result huagao_ds::call(const Identity& origin, DataGroup dg, Dat dat, Msg msg, v swprintf_s(buf, _countof(buf) - 1, L"[%x - %s]DSEntry(%s, %s, %s) = {%s, %s}\r\n", GetCurrentThreadId(), desc_state(state(), ss), desc_data_group(dg, dgs), desc_data(dat, dts), desc_msg(msg, ms), desc_return_code(rt, rcs), desc_condition_code((ConditionCode)(Status)rt, cs)); load_sane_util::log_info(buf, 0); - if ((int)rt.returnCode() && rt.returnCode() != ReturnCode::NotDsEvent && dat == Dat::PendingXfers && Msg::Reset == msg && scanner_status_ == SCANNER_STATUS_STOPPED) // PurvarScannerForHomework.exe - move modifying from EndXfer to xfer::Reset - rt = success(); + if ((int)rt.returnCode() && rt.returnCode() != ReturnCode::NotDsEvent) + { + if (dat == Dat::PendingXfers && Msg::Reset == msg && scanner_status_ == SCANNER_STATUS_STOPPED) // PurvarScannerForHomework.exe - move modifying from EndXfer to xfer::Reset + rt = success(); + else if (rt.status() == ConditionCode::SeqError) + { + if (dat == Dat::ImageInfo && Msg::Get == msg && scanner_status_ == SCANNER_STATUS_STOPPED) // for demo.exe + { + rt = { ReturnCode::Success, ConditionCode::Bummer }; + } + else if (dat == Dat::PendingXfers && Msg::EndXfer == msg && scanner_status_ == SCANNER_STATUS_STOPPED) // for photoshop.exe + { + // PendingXfers& data + (static_cast(data))->setCount(0); + rt = { ReturnCode::Success, ConditionCode::Success }; + } + } + } } in_calling = calling; @@ -3583,17 +3599,17 @@ int huagao_ds::handle_scanner_event(int ev, bool from_event_proc) case SANE_EVENT_UI_CLOSE_SETTING: scanner_->ui_hide(); rc = notifyCloseCancel(); - if (!Twpp::success(rc)) - { - rc = notifyXferReady(); // 好分数需要再通知 FAINT :( - modified on 2022-10-20 - if (!Twpp::success(rc)) - { - wchar_t msg[128] = { 0 }, unk[20] = { 0 }; - swprintf_s(msg, _countof(msg) - 1, L"[%x]yscan: notifyXferReady failed after setting UI closed with error %d\r\n", GetCurrentThreadId(), rc); - load_sane_util::log_info(msg, 0); - } - rc = notifyCloseCancel(); - } + //if (!Twpp::success(rc)) + //{ + // rc = notifyXferReady(); // 好分数需要再通知 FAINT :( - modified on 2022-10-20 + // if (!Twpp::success(rc)) + // { + // wchar_t msg[128] = { 0 }, unk[20] = { 0 }; + // swprintf_s(msg, _countof(msg) - 1, L"[%x]yscan: notifyXferReady failed after setting UI closed with error %d\r\n", GetCurrentThreadId(), rc); + // load_sane_util::log_info(msg, 0); + // } + // rc = notifyCloseCancel(); + //} show_setting_ = false; break; case SANE_EVENT_UI_CLOSE_CANCEL: