From cf2c03e3cda235a0232dd8c1d5e8716a9d0c88dd Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Tue, 20 Sep 2022 12:41:32 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E8=AE=BE=E7=BD=AE=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E5=85=B3=E9=97=AD=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sane/DlgIndicator.cpp | 2 +- sane/DlgSetting.cpp | 2 +- sane/scanned_img.cpp | 9 +++++++++ sane/scanner.cpp | 11 ++++++++--- twain/load_sane.cpp | 30 ++++++++++++++++++++++++++++++ twain/load_sane.h | 3 +++ twain/twain/huagaods.cpp | 10 +++++++--- 7 files changed, 59 insertions(+), 8 deletions(-) diff --git a/sane/DlgIndicator.cpp b/sane/DlgIndicator.cpp index 58bf365..b2a4054 100644 --- a/sane/DlgIndicator.cpp +++ b/sane/DlgIndicator.cpp @@ -117,7 +117,7 @@ void dlg_indicator::handle_command(WORD code, WORD id, HANDLE ctrl) } void dlg_indicator::notify_over(bool cancel) { - notify_ui_event(cancel ? SANE_EVENT_UI_CLOSE_CANCEL : SANE_EVENT_SCAN_FINISHED); + notify_ui_event(cancel ? SANE_EVENT_UI_CLOSE_CANCEL : SANE_EVENT_UI_CLOSE_NORMAL); } HWND dlg_indicator::window(void) diff --git a/sane/DlgSetting.cpp b/sane/DlgSetting.cpp index cf8876f..ba4a3e3 100644 --- a/sane/DlgSetting.cpp +++ b/sane/DlgSetting.cpp @@ -101,7 +101,7 @@ void dlg_setting::handle_command(WORD code, WORD id, HANDLE ctrl) } void dlg_setting::notify_over(void) { - notify_ui_event(SANE_EVENT_UI_CLOSE_NORMAL); + notify_ui_event(SANE_EVENT_UI_CLOSE_SETTING); } void dlg_setting::on_init_dialog(void) { diff --git a/sane/scanned_img.cpp b/sane/scanned_img.cpp index 8a11140..694d993 100644 --- a/sane/scanned_img.cpp +++ b/sane/scanned_img.cpp @@ -80,6 +80,7 @@ COM_API_IMPLEMENT(refer, long, release(void)) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // class mapping_buf const unsigned int max_mem_block = 2 * 1024 * 1024; +extern void __stdcall log_info(const wchar_t* info, int level); mapping_buf::mapping_buf() : bytes_(0), offset_(0), mapped_bytes_(0), map_(NULL), buf_(NULL), file_(""), rmv_file_(true), page_size_(0), is_mem_(false) { @@ -117,6 +118,14 @@ void mapping_buf::init_map(const char* file, unsigned long long size) if (!map_) DeleteFileA(file); } + + { + std::wstring info(local_trans::a2u(file)); + wchar_t buf[80] = { 0 }; + + swprintf_s(buf, _countof(buf) - 1, L"Mapping %u bytes to file: ", size); + log_info((buf + info + L"\r\n").c_str(), 0); + } } else { diff --git a/sane/scanner.cpp b/sane/scanner.cpp index 5a95cb8..95638d6 100644 --- a/sane/scanner.cpp +++ b/sane/scanner.cpp @@ -251,18 +251,23 @@ void scanner::apply_config(void) } void scanner::on_ui_event(int uev, void* sender) { - if (prev_start_result_ != SANE_STATUS_GOOD && sender == indicator_.get()) + bool indicator = sender == indicator_.get(); + if (prev_start_result_ != SANE_STATUS_GOOD && indicator) indicator_.reset(); else { - events_.save(uev); if (/*events_.count() > 5 && !is_ui_wait_img_ &&*/ (uev == SANE_EVENT_UI_CLOSE_CANCEL || uev == SANE_EVENT_UI_CLOSE_NORMAL)) { events_.clear(); ui_hide(); - events_.save(SANE_EVENT_SCAN_FINISHED); + if(indicator) + events_.save(SANE_EVENT_SCAN_FINISHED); + else + events_.save(SANE_EVENT_UI_CLOSE_SETTING); } + else + events_.save(uev); } } int scanner::open(void) diff --git a/twain/load_sane.cpp b/twain/load_sane.cpp index 3953fbe..67901e7 100644 --- a/twain/load_sane.cpp +++ b/twain/load_sane.cpp @@ -1,8 +1,11 @@ #include "pch.h" #include "load_sane.h" #include +#include // for SHFileOperationW #include "../../sdk/include/huagao/brand.h" +#pragma comment(lib, "shell32.lib") + namespace load_sane_util { static std::wstring sane_path(L""); @@ -192,4 +195,31 @@ namespace load_sane_util { return m2u(ansi, CP_ACP); } + + int move_file(const char* from, const char* to) + { + return move_file(ansi2unic(from).c_str(), ansi2unic(to).c_str()); + } + int move_file(const wchar_t* from, const wchar_t* to) + { + SHFILEOPSTRUCTW fo = { 0 }; + int ret = 0; + std::wstring _from(from), _to(to ? to : L""); + + if (wcsicmp(from, to) == 0) + return 0; + + _from += std::wstring((wchar_t*)&ret, 2); // ended with double '\0' + fo.pFrom = &_from[0]; + _to += std::wstring((wchar_t*)&ret, 2); // ended with double '\0' + fo.pTo = &_to[0]; + fo.fFlags = FOF_NO_UI | FOF_NO_CONNECTED_ELEMENTS; // 614 | 2000 + fo.wFunc = FO_MOVE; + + ret = SHFileOperationW(&fo); + if (ret == /*DE_SAMEFILE*/0x71) + ret = 0; + + return ret; + } }; diff --git a/twain/load_sane.h b/twain/load_sane.h index 9d3107f..137fe29 100644 --- a/twain/load_sane.h +++ b/twain/load_sane.h @@ -17,5 +17,8 @@ namespace load_sane_util std::string utf82ansi(const char* utf8); std::string ansi2utf8(const char* ansi); std::wstring ansi2unic(const char* ansi); + + int move_file(const char* from, const char* to); + int move_file(const wchar_t* from, const wchar_t* to); }; diff --git a/twain/twain/huagaods.cpp b/twain/twain/huagaods.cpp index 7bc2e96..f52bb1e 100644 --- a/twain/twain/huagaods.cpp +++ b/twain/twain/huagaods.cpp @@ -746,6 +746,9 @@ Result huagao_ds::eventProcess(const Identity&, Event& event) case SANE_EVENT_SCAN_FINISHED: notifyCloseOk(); break; + case SANE_EVENT_UI_CLOSE_SETTING: + notifyCloseCancel(); + break; case SANE_EVENT_UI_SCAN_COMMAND: scanner_->ui_show_progress(NULL); scanner_->start(); @@ -1135,6 +1138,7 @@ Twpp::Result huagao_ds::imageFileXferGet(const Twpp::Identity& origin) if (img) { std::string file(img->file()); + int cv_e = 0; if (file.empty()) { dst = fopen(m_fileXfer.filePath().string().c_str(), "wb"); @@ -1177,13 +1181,13 @@ Twpp::Result huagao_ds::imageFileXferGet(const Twpp::Identity& origin) img->keep_file(true); img->release(); - if (MoveFileA(file.c_str(), m_fileXfer.filePath().string().c_str())) + cv_e = load_sane_util::move_file(file.c_str(), m_fileXfer.filePath().string().c_str()); + if (cv_e == 0) ret = Result(ReturnCode::XferDone, ConditionCode::Success); else DeleteFileA(file.c_str()); } - int cv_e = 0; if (ret.status() == ConditionCode::Success && m_fileXfer.format() != ImageFileFormat::Bmp) { SANE_ImageFormatConvert conv; @@ -1221,7 +1225,7 @@ Twpp::Result huagao_ds::imageFileXferGet(const Twpp::Identity& origin) { std::wstring info(load_sane_util::ansi2unic(m_fileXfer.filePath().string().c_str())); wchar_t r[80] = { 0 }; - swprintf_s(r, _countof(r) - 1, L": status = %d(convert: 0x%x)\r\n", ret.status(), cv_e); + swprintf_s(r, _countof(r) - 1, L": status = %d(Fail: 0x%x)\r\n", ret.status(), cv_e); load_sane_util::log_info((info + r).c_str(), 0); } }