diff --git a/app/scanner2/mainwindow.cpp b/app/scanner2/mainwindow.cpp index 1fe074a7..3db6fd94 100644 --- a/app/scanner2/mainwindow.cpp +++ b/app/scanner2/mainwindow.cpp @@ -2919,7 +2919,7 @@ void MainWindow::on_act_about_triggered() #endif HGChar version[32] = { 0 }; - HGVersion_GetCurrVersion(HGVERSION_APPNAME_SCANNER, oem, version, 32); + getCurrVersion(HGVERSION_APPNAME_SCANNER, oem, version, 32); QString title = tr("about %1").arg(windowTitle()); QString content; @@ -3891,6 +3891,120 @@ void MainWindow::deleteDevUser() } } +HGResult MainWindow::getCurrVersion(const HGChar* appName, const HGChar* oemName, HGChar* version, HGUInt maxLen) +{ + if (NULL == version || 0 == maxLen) + { + return HGBASE_ERR_INVALIDARG; + } + + std::string ver = "0.0.0.0"; + + if (appName == HGVERSION_APPNAME_SCANNER) + { +#if defined(HG_CMP_MSC) + std::string regName; + if (oemName == HGVERSION_OEMNAME_HANVON) + regName = "SOFTWARE\\HanvonScan"; + else if (oemName == HGVERSION_OEMNAME_LANXUM) + regName = "SOFTWARE\\LanxumScan"; + else if (oemName == HGVERSION_OEMNAME_CUMTENN) + regName = "SOFTWARE\\CumtennScan"; + else if (oemName == HGVERSION_OEMNAME_MICROTEK) + regName = "SOFTWARE\\MicrotekScan"; + else if (oemName == HGVERSION_OEMNAME_UNIS) + regName = "SOFTWARE\\UniScan"; + else + regName = "SOFTWARE\\HuaGoScan"; + + HKEY hKey = NULL; + RegOpenKeyExA(HKEY_LOCAL_MACHINE, regName.c_str(), 0, KEY_QUERY_VALUE, &hKey); + if (NULL != hKey) + { + CHAR szData[MAX_PATH] = { 0 }; + DWORD cbData = MAX_PATH; + if (ERROR_SUCCESS == RegQueryValueExA(hKey, "AppVersion", NULL, NULL, (LPBYTE)szData, &cbData)) + { + ver = szData; + } + + RegCloseKey(hKey); + } +#else + std::string appName; + std::string osName = GetOSName(); + if ("UnionTech" == osName) + { + if (oemName == HGVERSION_OEMNAME_HANVON) + appName = "com.hanvonchina.hanvonscan"; + else if (oemName == HGVERSION_OEMNAME_LANXUM) + appName = "com.lanxumchina.lanxumscan"; + else if (oemName == HGVERSION_OEMNAME_CUMTENN) + appName = "com.cumtennchina.cumtennscan"; + else if (oemName == HGVERSION_OEMNAME_MICROTEK) + appName = "com.microtekchina.microtekscan"; + else if (oemName == HGVERSION_OEMNAME_UNIS) + appName = "com.unischina.uniscan"; + else + appName = "com.huagaochina.huagoscan"; + } + else + { + if (oemName == HGVERSION_OEMNAME_HANVON) + appName = "scanner-driver-hanvon"; + else if (oemName == HGVERSION_OEMNAME_LANXUM) + appName = "scanner-driver-lanxum"; + else if (oemName == HGVERSION_OEMNAME_CUMTENN) + appName = "scanner-driver-cumtenn"; + else if (oemName == HGVERSION_OEMNAME_MICROTEK) + appName = "scanner-driver-microtek"; + else if (oemName == HGVERSION_OEMNAME_UNIS) + appName = "scanner-driver-unis"; + else + appName = "scanner-driver-huagao"; + } + + std::string cmd = "dpkg -l " + appName; + FILE* fp = popen(cmd.c_str(), "r"); + if (NULL != fp) + { + char buff[2048] = { 0 }; + fread(buff, 2048, 1, fp); + + char* p = strstr(buff, appName.c_str()); + if (NULL != p) + { + char* p2 = p + appName.size(); + while (!isdigit(*p2) && '.' != *p2) + ++p2; + + int len = (int)strlen(p2); + for (int i = 0; i < len; ++i) + { + if (!isdigit(p2[i]) && '.' != p2[i]) + { + p2[i] = '\0'; + break; + } + } + + ver = p2; + } + + pclose(fp); + } +#endif + } + + if (maxLen < ver.size() + 1) + { + return HGBASE_ERR_FAIL; + } + + strcpy(version, ver.c_str()); + return HGBASE_ERR_OK; +} + #if !defined(HG_CMP_MSC) void MainWindow::checkRollerLife() { diff --git a/app/scanner2/mainwindow.h b/app/scanner2/mainwindow.h index 69b46b0b..d7192ab6 100644 --- a/app/scanner2/mainwindow.h +++ b/app/scanner2/mainwindow.h @@ -245,6 +245,7 @@ private: void initAcquireIntoComboBox(); void updateSideBar(); void deleteDevUser(); + HGResult getCurrVersion(const HGChar* appName, const HGChar* oemName, HGChar* version, HGUInt maxLen); #if !defined(HG_CMP_MSC) void checkRollerLife(); diff --git a/build2/qt/HGScanner2/HGScanner2.pro b/build2/qt/HGScanner2/HGScanner2.pro index 364c2397..b6c908dd 100644 --- a/build2/qt/HGScanner2/HGScanner2.pro +++ b/build2/qt/HGScanner2/HGScanner2.pro @@ -85,7 +85,7 @@ win32 { LIBS += -lgdi32 -lgdiplus -ldbghelp -luser32 -ladvapi32 LIBS += -L$$PWD/../../build/$${MY_OS}/$${OEM_NAME}/$${MY_ARCH}/$${MY_CONFIGURE} -l$${OEM_PREFIX}Base -l$${OEM_PREFIX}ImgFmt -l$${OEM_PREFIX}ImgProc\ - -l$${OEM_PREFIX}TwainUser -l$${OEM_PREFIX}Version + -l$${OEM_PREFIX}TwainUser LIBS += -L$$PWD/../../../../sdk/lib/win/$${MY_ARCH}/OEM/$${OEM_NAME} -llang # sane.dll @@ -130,7 +130,7 @@ unix { LIBS += -lpthread -ldl LIBS += -L$$PWD/../../build/$${MY_OS}/$${OEM_NAME}/$${MY_ARCH}/$${MY_CONFIGURE} -l$${OEM_PREFIX2}Base -l$${OEM_PREFIX2}ImgFmt -l$${OEM_PREFIX2}ImgProc\ - -l$${OEM_PREFIX2}SaneUI -l$${OEM_PREFIX2}SaneUser -l$${OEM_PREFIX2}Version + -l$${OEM_PREFIX2}SaneUI -l$${OEM_PREFIX2}SaneUser LIBS += -L$$PWD/../../../../release/$${MY_OS}/$${MY_ARCH2} -llang }