2022-07-13 08:23:51 +00:00
|
|
|
|
#include "HGVersion.h"
|
|
|
|
|
#include "HGVersionImpl.hpp"
|
|
|
|
|
#include "../base/HGInc.h"
|
|
|
|
|
#include <vector>
|
|
|
|
|
#include <assert.h>
|
|
|
|
|
#include <string>
|
2023-04-13 10:10:06 +00:00
|
|
|
|
#if defined(HG_CMP_MSC)
|
|
|
|
|
#include <shellapi.h>
|
|
|
|
|
#include <tlhelp32.h>
|
|
|
|
|
#include <psapi.h>
|
|
|
|
|
#endif
|
2022-07-13 08:23:51 +00:00
|
|
|
|
|
|
|
|
|
HGResult HGAPI HGVersion_CreateMgr(HGVersionMgr* mgr)
|
|
|
|
|
{
|
|
|
|
|
if (NULL == mgr)
|
|
|
|
|
{
|
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGVersionMgrImpl* versionMgrImpl = new HGVersionMgrImpl;
|
|
|
|
|
*mgr = (HGVersionMgr)versionMgrImpl;
|
|
|
|
|
return HGBASE_ERR_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGResult HGAPI HGVersion_DestroyMgr(HGVersionMgr mgr)
|
|
|
|
|
{
|
|
|
|
|
if (NULL == mgr)
|
|
|
|
|
{
|
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl *)mgr;
|
|
|
|
|
delete versionMgrImpl;
|
|
|
|
|
return HGBASE_ERR_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGResult HGAPI HGVersion_GetServerConfig(HGVersionMgr mgr, HGServerConfig* config)
|
|
|
|
|
{
|
|
|
|
|
if (NULL == mgr)
|
|
|
|
|
{
|
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
|
|
|
|
|
return versionMgrImpl->GetServerConfig(config);
|
|
|
|
|
}
|
|
|
|
|
|
2023-01-13 03:01:24 +00:00
|
|
|
|
HGResult HGAPI HGVersion_PostInstallInfo(HGVersionMgr mgr, const HGChar* appName, const HGChar* oemName, const HGChar* desc)
|
2022-07-13 08:23:51 +00:00
|
|
|
|
{
|
|
|
|
|
if (NULL == mgr)
|
|
|
|
|
{
|
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
|
2023-01-13 03:01:24 +00:00
|
|
|
|
return versionMgrImpl->PostInstallInfo(appName, oemName, desc);
|
2022-07-13 08:23:51 +00:00
|
|
|
|
}
|
|
|
|
|
|
2023-01-13 03:01:24 +00:00
|
|
|
|
HGResult HGAPI HGVersion_PostUninstallInfo(HGVersionMgr mgr, const HGChar* appName, const HGChar* oemName, const HGChar* desc)
|
2022-07-13 08:23:51 +00:00
|
|
|
|
{
|
|
|
|
|
if (NULL == mgr)
|
|
|
|
|
{
|
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
|
2023-01-13 03:01:24 +00:00
|
|
|
|
return versionMgrImpl->PostUninstallInfo(appName, oemName, desc);
|
2022-07-13 08:23:51 +00:00
|
|
|
|
}
|
|
|
|
|
|
2023-01-13 03:01:24 +00:00
|
|
|
|
HGResult HGAPI HGVersion_PostCrashInfo(HGVersionMgr mgr, const HGChar* appName, const HGChar* oemName, const HGChar* desc, const HGChar* crashFilePath, const HGChar* exceptionAddr)
|
2022-07-13 08:23:51 +00:00
|
|
|
|
{
|
|
|
|
|
if (NULL == mgr)
|
|
|
|
|
{
|
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
|
2023-01-13 03:01:24 +00:00
|
|
|
|
return versionMgrImpl->PostCrashInfo(appName, oemName, desc, crashFilePath, exceptionAddr);
|
2022-07-13 08:23:51 +00:00
|
|
|
|
}
|
|
|
|
|
|
2023-01-13 03:01:24 +00:00
|
|
|
|
HGResult HGAPI HGVersion_PostUserFeedback(HGVersionMgr mgr, const HGChar* appName, const HGChar* oemName, const HGChar* desc, const HGChar* feedback, const HGChar* contact)
|
2022-07-13 08:23:51 +00:00
|
|
|
|
{
|
|
|
|
|
if (NULL == mgr)
|
|
|
|
|
{
|
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
|
2023-01-13 03:01:24 +00:00
|
|
|
|
return versionMgrImpl->PostUserFeedback(appName, oemName, desc, feedback, contact);
|
2022-07-13 08:23:51 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-07-25 08:49:48 +00:00
|
|
|
|
HGResult HGAPI HGVersion_PostDeviceOpenInfo(HGVersionMgr mgr, const HGChar* devName, const HGChar* devSN,
|
|
|
|
|
const HGChar* devType, const HGChar* devFW)
|
|
|
|
|
{
|
|
|
|
|
if (NULL == mgr)
|
|
|
|
|
{
|
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
|
|
|
|
|
return versionMgrImpl->PostDeviceOpenInfo(devName, devSN, devType, devFW);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGResult HGAPI HGVersion_PostDeviceCloseInfo(HGVersionMgr mgr, const HGChar* devName, const HGChar* devSN,
|
|
|
|
|
const HGChar* devType, const HGChar* devFW)
|
|
|
|
|
{
|
|
|
|
|
if (NULL == mgr)
|
|
|
|
|
{
|
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
|
|
|
|
|
return versionMgrImpl->PostDeviceCloseInfo(devName, devSN, devType, devFW);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGResult HGAPI HGVersion_PostDeviceScanCountInfo(HGVersionMgr mgr, const HGChar* devName, const HGChar* devSN,
|
|
|
|
|
const HGChar* devType, const HGChar* devFW, HGUInt scanCount)
|
|
|
|
|
{
|
|
|
|
|
if (NULL == mgr)
|
|
|
|
|
{
|
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
|
|
|
|
|
return versionMgrImpl->PostDeviceScanCountInfo(devName, devSN, devType, devFW, scanCount);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGResult HGAPI HGVersion_PostDeviceClearRollerInfo(HGVersionMgr mgr, const HGChar* devName, const HGChar* devSN,
|
|
|
|
|
const HGChar* devType, const HGChar* devFW)
|
|
|
|
|
{
|
|
|
|
|
if (NULL == mgr)
|
|
|
|
|
{
|
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
|
|
|
|
|
return versionMgrImpl->PostDeviceClearRollerInfo(devName, devSN, devType, devFW);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGResult HGAPI HGVersion_PostDeviceHistroyCountInfo(HGVersionMgr mgr, const HGChar* devName, const HGChar* devSN,
|
|
|
|
|
const HGChar* devType, const HGChar* devFW, HGUInt histroyCount)
|
|
|
|
|
{
|
|
|
|
|
if (NULL == mgr)
|
|
|
|
|
{
|
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
|
|
|
|
|
return versionMgrImpl->PostDeviceHistroyCountInfo(devName, devSN, devType, devFW, histroyCount);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGResult HGAPI HGVersion_PostDeviceRollerCountInfo(HGVersionMgr mgr, const HGChar* devName, const HGChar* devSN,
|
|
|
|
|
const HGChar* devType, const HGChar* devFW, HGUInt rollerCount)
|
|
|
|
|
{
|
|
|
|
|
if (NULL == mgr)
|
|
|
|
|
{
|
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
|
|
|
|
|
return versionMgrImpl->PostDeviceRollerCountInfo(devName, devSN, devType, devFW, rollerCount);
|
|
|
|
|
}
|
|
|
|
|
|
2022-09-19 07:03:20 +00:00
|
|
|
|
HGResult HGAPI HGVersion_PostDevicePaperJamInfo(HGVersionMgr mgr, const HGChar* devName, const HGChar* devSN,
|
|
|
|
|
const HGChar* devType, const HGChar* devFW)
|
|
|
|
|
{
|
|
|
|
|
if (NULL == mgr)
|
|
|
|
|
{
|
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
|
|
|
|
|
return versionMgrImpl->PostDevicePaperJamInfo(devName, devSN, devType, devFW);
|
|
|
|
|
}
|
|
|
|
|
|
2023-01-13 03:01:24 +00:00
|
|
|
|
HGResult HGAPI HGVersion_PostUserOpenInfo(HGVersionMgr mgr, const HGChar* appName, const HGChar* oemName)
|
2022-07-25 08:49:48 +00:00
|
|
|
|
{
|
|
|
|
|
if (NULL == mgr)
|
|
|
|
|
{
|
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
|
2023-01-13 03:01:24 +00:00
|
|
|
|
return versionMgrImpl->PostUserOpenInfo(appName, oemName);
|
2022-07-25 08:49:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
2023-01-13 03:01:24 +00:00
|
|
|
|
HGResult HGAPI HGVersion_PostUserCloseInfo(HGVersionMgr mgr, const HGChar* appName, const HGChar* oemName)
|
2022-07-25 08:49:48 +00:00
|
|
|
|
{
|
|
|
|
|
if (NULL == mgr)
|
|
|
|
|
{
|
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
|
2023-01-13 03:01:24 +00:00
|
|
|
|
return versionMgrImpl->PostUserCloseInfo(appName, oemName);
|
2022-07-25 08:49:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
2023-01-13 03:01:24 +00:00
|
|
|
|
HGResult HGAPI HGVersion_PostUserLoginInfo(HGVersionMgr mgr, const HGChar* appName, const HGChar* oemName)
|
2022-07-25 08:49:48 +00:00
|
|
|
|
{
|
|
|
|
|
if (NULL == mgr)
|
|
|
|
|
{
|
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
|
2023-01-13 03:01:24 +00:00
|
|
|
|
return versionMgrImpl->PostUserLoginInfo(appName, oemName);
|
2022-07-25 08:49:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
2023-01-13 03:01:24 +00:00
|
|
|
|
HGResult HGAPI HGVersion_PostUserLogoutInfo(HGVersionMgr mgr, const HGChar* appName, const HGChar* oemName)
|
2022-07-25 08:49:48 +00:00
|
|
|
|
{
|
|
|
|
|
if (NULL == mgr)
|
|
|
|
|
{
|
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
|
2023-01-13 03:01:24 +00:00
|
|
|
|
return versionMgrImpl->PostUserLogoutInfo(appName, oemName);
|
2022-07-25 08:49:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-11-14 07:31:54 +00:00
|
|
|
|
HGResult HGAPI HGVersion_PostDeviceLockInfo(HGVersionMgr mgr, const HGChar* devName, const HGChar* devSN,
|
|
|
|
|
const HGChar* devType, const HGChar* devFW, HGBool isLock)
|
|
|
|
|
{
|
|
|
|
|
if (NULL == mgr)
|
|
|
|
|
{
|
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
|
|
|
|
|
return versionMgrImpl->PostDeviceLockInfo(devName, devSN, devType, devFW, isLock);
|
|
|
|
|
}
|
|
|
|
|
|
2023-01-13 03:01:24 +00:00
|
|
|
|
HGResult HGAPI HGVersion_GetVersionList(HGVersionMgr mgr, const HGChar* appName, const HGChar* oemName, HGVersionInfo** info, HGUInt* count)
|
2022-07-13 08:23:51 +00:00
|
|
|
|
{
|
|
|
|
|
if (NULL == mgr)
|
|
|
|
|
{
|
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
|
2023-01-13 03:01:24 +00:00
|
|
|
|
return versionMgrImpl->GetVersionList(appName, oemName, info, count);
|
2022-07-13 08:23:51 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGResult HGAPI HGVersion_HttpDownload(HGVersionMgr mgr, const HGChar* url, const HGChar* saveFilePath, HGHttpDownloadFunc func, HGPointer param)
|
|
|
|
|
{
|
|
|
|
|
if (NULL == mgr)
|
|
|
|
|
{
|
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
|
|
|
|
|
return versionMgrImpl->HttpDownload(url, saveFilePath, func, param);
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-14 01:41:51 +00:00
|
|
|
|
HGResult HGAPI HGVersion_ReleaseVersionList(HGVersionInfo* info, HGUInt count)
|
|
|
|
|
{
|
|
|
|
|
return HGVersionMgrImpl::ReleaseVersionList(info, count);
|
|
|
|
|
}
|
|
|
|
|
|
2023-01-13 03:01:24 +00:00
|
|
|
|
HGResult HGAPI HGVersion_GetCurrVersion(const HGChar* appName, const HGChar* oemName, HGChar* version, HGUInt maxLen)
|
2022-07-13 08:23:51 +00:00
|
|
|
|
{
|
2023-01-13 03:01:24 +00:00
|
|
|
|
return HGVersionMgrImpl::GetCurrVersion(appName, oemName, version, maxLen);
|
2022-07-13 08:23:51 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static std::vector<std::string> split(std::string strtem, char a)
|
|
|
|
|
{
|
|
|
|
|
std::vector<std::string> strvec;
|
|
|
|
|
|
|
|
|
|
std::string::size_type pos1, pos2;
|
|
|
|
|
pos2 = strtem.find(a);
|
|
|
|
|
pos1 = 0;
|
|
|
|
|
while (std::string::npos != pos2)
|
|
|
|
|
{
|
|
|
|
|
strvec.push_back(strtem.substr(pos1, pos2 - pos1));
|
|
|
|
|
|
|
|
|
|
pos1 = pos2 + 1;
|
|
|
|
|
pos2 = strtem.find(a, pos1);
|
|
|
|
|
}
|
|
|
|
|
strvec.push_back(strtem.substr(pos1));
|
|
|
|
|
|
|
|
|
|
return strvec;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int CompareVersion(const std::string& version1, const std::string& version2)
|
|
|
|
|
{
|
|
|
|
|
std::vector<std::string> versionList1 = split(version1, '.');
|
|
|
|
|
std::vector<std::string> versionList2 = split(version2, '.');
|
|
|
|
|
|
|
|
|
|
int size1 = (int)versionList1.size();
|
|
|
|
|
int size2 = (int)versionList2.size();
|
|
|
|
|
|
|
|
|
|
int i = 0;
|
|
|
|
|
while (i < size1 && i < size2)
|
|
|
|
|
{
|
|
|
|
|
if (atoi(versionList1[i].c_str()) < atoi(versionList2[i].c_str()))
|
|
|
|
|
{
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
else if (atoi(versionList1[i].c_str()) > atoi(versionList2[i].c_str()))
|
|
|
|
|
{
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
++i;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (i == size1 && i < size2)
|
|
|
|
|
return -1;
|
|
|
|
|
else if (i < size1 && i == size2)
|
|
|
|
|
return 1;
|
|
|
|
|
|
|
|
|
|
assert(i == size1 && i == size2);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGResult HGAPI HGVersion_CompareVersion(const HGChar* version1, const HGChar* version2, HGInt* result)
|
|
|
|
|
{
|
|
|
|
|
if (NULL == result)
|
|
|
|
|
{
|
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int ret = ::CompareVersion(version1, version2);
|
|
|
|
|
*result = ret;
|
|
|
|
|
return HGBASE_ERR_OK;
|
2022-09-19 07:03:20 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGResult HGAPI HGVersion_BlackListCheck(HGVersionMgr mgr, const HGChar* devSN, HGBool* inList)
|
|
|
|
|
{
|
|
|
|
|
if (NULL == mgr)
|
|
|
|
|
{
|
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
|
|
|
|
|
return versionMgrImpl->BlackListCheck(devSN, inList);
|
2022-09-29 03:13:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
2023-04-13 10:10:06 +00:00
|
|
|
|
HGResult HGAPI HGVersion_GetAppStatus(const HGChar* appName, const HGChar* oemName, HGBool *isRun)
|
|
|
|
|
{
|
|
|
|
|
if (NULL == appName || NULL == oemName || NULL == isRun)
|
|
|
|
|
{
|
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
*isRun = HGFALSE;
|
|
|
|
|
|
|
|
|
|
if (0 == strcmp(appName, HGVERSION_APPNAME_SCANNER))
|
|
|
|
|
{
|
|
|
|
|
#if defined(HG_CMP_MSC)
|
|
|
|
|
|
|
|
|
|
std::wstring appPath;
|
|
|
|
|
std::wstring regName;
|
|
|
|
|
|
|
|
|
|
if (0 == strcmp(oemName, HGVERSION_OEMNAME_HANVON))
|
|
|
|
|
regName = L"SOFTWARE\\HanvonScan";
|
|
|
|
|
else if (0 == strcmp(oemName, HGVERSION_OEMNAME_LANXUM))
|
|
|
|
|
regName = L"SOFTWARE\\LanxumScan";
|
|
|
|
|
else if (0 == strcmp(oemName, HGVERSION_OEMNAME_CUMTENN))
|
|
|
|
|
regName = L"SOFTWARE\\CumtennScan";
|
|
|
|
|
else if (0 == strcmp(oemName, HGVERSION_OEMNAME_MICROTEK))
|
|
|
|
|
regName = L"SOFTWARE\\MicrotekScan";
|
|
|
|
|
else if (0 == strcmp(oemName, HGVERSION_OEMNAME_UNIS))
|
|
|
|
|
regName = L"SOFTWARE\\UniScan";
|
|
|
|
|
else
|
|
|
|
|
regName = L"SOFTWARE\\HuaGoScan";
|
|
|
|
|
|
|
|
|
|
HKEY hKey = nullptr;
|
|
|
|
|
RegOpenKeyExW(HKEY_LOCAL_MACHINE, regName.c_str(), 0, KEY_QUERY_VALUE, &hKey);
|
|
|
|
|
if (nullptr != hKey)
|
|
|
|
|
{
|
|
|
|
|
WCHAR szData[MAX_PATH] = { 0 };
|
|
|
|
|
DWORD cbData = MAX_PATH;
|
|
|
|
|
if (ERROR_SUCCESS == RegQueryValueExW(hKey, L"Application", nullptr, nullptr, (LPBYTE)szData, &cbData))
|
|
|
|
|
{
|
|
|
|
|
appPath = szData;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
RegCloseKey(hKey);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!appPath.empty())
|
|
|
|
|
{
|
|
|
|
|
HANDLE hSnapshot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
|
|
|
|
|
if (hSnapshot != INVALID_HANDLE_VALUE)
|
|
|
|
|
{
|
|
|
|
|
PROCESSENTRY32 pe;
|
|
|
|
|
pe.dwSize = sizeof(PROCESSENTRY32);
|
|
|
|
|
BOOL bFindFirstProcess = ::Process32First(hSnapshot, &pe);
|
|
|
|
|
if (bFindFirstProcess)
|
|
|
|
|
{
|
|
|
|
|
do
|
|
|
|
|
{
|
|
|
|
|
WCHAR exeFullPath[1024] = { 0 };
|
|
|
|
|
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pe.th32ProcessID);
|
|
|
|
|
if (nullptr != hProcess)
|
|
|
|
|
{
|
|
|
|
|
::GetModuleFileNameExW(hProcess, NULL, exeFullPath, 1024);
|
|
|
|
|
::CloseHandle(hProcess);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (0 == wcsicmp(exeFullPath, appPath.c_str()))
|
|
|
|
|
{
|
|
|
|
|
*isRun = HGTRUE;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} while (::Process32Next(hSnapshot, &pe));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
::CloseHandle(hSnapshot);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
std::string cmd;
|
|
|
|
|
std::string appPath;
|
|
|
|
|
|
|
|
|
|
std::string osName;
|
|
|
|
|
FILE *file = popen("cat /etc/issue | cut -d\' \' -f1", "r");
|
|
|
|
|
if (NULL != file)
|
|
|
|
|
{
|
|
|
|
|
char data[1024] = {0};
|
|
|
|
|
if (NULL != fgets(data, 1024, file))
|
|
|
|
|
osName = data;
|
|
|
|
|
pclose(file);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("osName=%s\n", osName.c_str());
|
|
|
|
|
if (osName.find("UnionTech") != std::string::npos)
|
|
|
|
|
{
|
|
|
|
|
if (0 == strcmp(oemName, HGVERSION_OEMNAME_HANVON))
|
|
|
|
|
{
|
|
|
|
|
cmd = "ps -wef | grep HanvonScan";
|
|
|
|
|
appPath = "/opt/apps/com.hanvonchina.hanvonscan/files/bin/HanvonScan";
|
|
|
|
|
}
|
|
|
|
|
else if (0 == strcmp(oemName, HGVERSION_OEMNAME_LANXUM))
|
|
|
|
|
{
|
|
|
|
|
cmd = "ps -wef | grep LanxumScan";
|
|
|
|
|
appPath = "/opt/apps/com.lanxumchina.lanxumscan/files/bin/LanxumScan";
|
|
|
|
|
}
|
|
|
|
|
else if (0 == strcmp(oemName, HGVERSION_OEMNAME_CUMTENN))
|
|
|
|
|
{
|
|
|
|
|
cmd = "ps -wef | grep CumtennScan";
|
|
|
|
|
appPath = "/opt/apps/com.cumtennchina.cumtennscan/files/bin/CumtennScan";
|
|
|
|
|
}
|
|
|
|
|
else if (0 == strcmp(oemName, HGVERSION_OEMNAME_MICROTEK))
|
|
|
|
|
{
|
|
|
|
|
cmd = "ps -wef | grep MicrotekScan";
|
|
|
|
|
appPath = "/opt/apps/com.microtekchina.microtekscan-ex/files/bin/MicrotekScan";
|
|
|
|
|
}
|
|
|
|
|
else if (0 == strcmp(oemName, HGVERSION_OEMNAME_UNIS))
|
|
|
|
|
{
|
|
|
|
|
cmd = "ps -wef | grep UniScan";
|
|
|
|
|
appPath = "/opt/apps/com.unischina.uniscan/files/bin/UniScan";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
cmd = "ps -wef | grep HuaGoScan";
|
|
|
|
|
appPath = "/opt/apps/com.huagaochina.huagoscan/files/bin/HuaGoScan";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (0 == strcmp(oemName, HGVERSION_OEMNAME_HANVON))
|
|
|
|
|
{
|
|
|
|
|
cmd = "ps -wef | grep HanvonScan";
|
|
|
|
|
appPath = "/opt/apps/scanner-driver-hanvon/bin/HanvonScan";
|
|
|
|
|
}
|
|
|
|
|
else if (0 == strcmp(oemName, HGVERSION_OEMNAME_LANXUM))
|
|
|
|
|
{
|
|
|
|
|
cmd = "ps -wef | grep LanxumScan";
|
|
|
|
|
appPath = "/opt/apps/scanner-driver-lanxum/bin/LanxumScan";
|
|
|
|
|
}
|
|
|
|
|
else if (0 == strcmp(oemName, HGVERSION_OEMNAME_CUMTENN))
|
|
|
|
|
{
|
|
|
|
|
cmd = "ps -wef | grep CumtennScan";
|
|
|
|
|
appPath = "/opt/apps/scanner-driver-cumtenn/bin/CumtennScan";
|
|
|
|
|
}
|
|
|
|
|
else if (0 == strcmp(oemName, HGVERSION_OEMNAME_MICROTEK))
|
|
|
|
|
{
|
|
|
|
|
cmd = "ps -wef | grep MicrotekScan";
|
|
|
|
|
appPath = "/opt/apps/scanner-driver-microtek-ex/bin/MicrotekScan";
|
|
|
|
|
}
|
|
|
|
|
else if (0 == strcmp(oemName, HGVERSION_OEMNAME_UNIS))
|
|
|
|
|
{
|
|
|
|
|
cmd = "ps -wef | grep UniScan";
|
|
|
|
|
appPath = "/opt/apps/scanner-driver-unis/bin/UniScan";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
cmd = "ps -wef | grep HuaGoScan";
|
|
|
|
|
appPath = "/opt/apps/scanner-driver-huagao/bin/HuaGoScan";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FILE *fp = popen(cmd.c_str(), "r");
|
|
|
|
|
if (nullptr != fp)
|
|
|
|
|
{
|
|
|
|
|
char data[2048] = {0};
|
|
|
|
|
while (data == fgets(data, 2048, fp))
|
|
|
|
|
{
|
|
|
|
|
if (nullptr != strstr(data, appPath.c_str()))
|
|
|
|
|
{
|
|
|
|
|
*isRun = HGTRUE;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pclose(fp);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return HGBASE_ERR_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGResult HGAPI HGVersion_RunApp(const HGChar* appName, const HGChar* oemName)
|
|
|
|
|
{
|
|
|
|
|
if (NULL == appName || NULL == oemName)
|
|
|
|
|
{
|
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (0 == strcmp(appName, HGVERSION_APPNAME_SCANNER))
|
|
|
|
|
{
|
|
|
|
|
#if defined(HG_CMP_MSC)
|
|
|
|
|
|
|
|
|
|
std::wstring appPath;
|
|
|
|
|
std::wstring regName;
|
|
|
|
|
|
|
|
|
|
if (0 == strcmp(oemName, HGVERSION_OEMNAME_HANVON))
|
|
|
|
|
regName = L"SOFTWARE\\HanvonScan";
|
|
|
|
|
else if (0 == strcmp(oemName, HGVERSION_OEMNAME_LANXUM))
|
|
|
|
|
regName = L"SOFTWARE\\LanxumScan";
|
|
|
|
|
else if (0 == strcmp(oemName, HGVERSION_OEMNAME_CUMTENN))
|
|
|
|
|
regName = L"SOFTWARE\\CumtennScan";
|
|
|
|
|
else if (0 == strcmp(oemName, HGVERSION_OEMNAME_MICROTEK))
|
|
|
|
|
regName = L"SOFTWARE\\MicrotekScan";
|
|
|
|
|
else if (0 == strcmp(oemName, HGVERSION_OEMNAME_UNIS))
|
|
|
|
|
regName = L"SOFTWARE\\UniScan";
|
|
|
|
|
else
|
|
|
|
|
regName = L"SOFTWARE\\HuaGoScan";
|
|
|
|
|
|
|
|
|
|
HKEY hKey = nullptr;
|
|
|
|
|
RegOpenKeyExW(HKEY_LOCAL_MACHINE, regName.c_str(), 0, KEY_QUERY_VALUE, &hKey);
|
|
|
|
|
if (nullptr != hKey)
|
|
|
|
|
{
|
|
|
|
|
WCHAR szData[MAX_PATH] = { 0 };
|
|
|
|
|
DWORD cbData = MAX_PATH;
|
|
|
|
|
if (ERROR_SUCCESS == RegQueryValueExW(hKey, L"Application", nullptr, nullptr, (LPBYTE)szData, &cbData))
|
|
|
|
|
{
|
|
|
|
|
appPath = szData;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
RegCloseKey(hKey);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!appPath.empty())
|
|
|
|
|
{
|
|
|
|
|
ShellExecuteW(nullptr, L"open", appPath.c_str(), nullptr, nullptr, SW_SHOW);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
std::string appPath;
|
|
|
|
|
|
|
|
|
|
std::string osName;
|
|
|
|
|
FILE *file = popen("cat /etc/issue | cut -d\' \' -f1", "r");
|
|
|
|
|
if (NULL != file)
|
|
|
|
|
{
|
|
|
|
|
char data[1024] = {0};
|
|
|
|
|
if (NULL != fgets(data, 1024, file))
|
|
|
|
|
osName = data;
|
|
|
|
|
pclose(file);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("osName=%s\n", osName.c_str());
|
|
|
|
|
if (osName.find("UnionTech") != std::string::npos)
|
|
|
|
|
{
|
|
|
|
|
if (0 == strcmp(oemName, HGVERSION_OEMNAME_HANVON))
|
|
|
|
|
appPath = "sh /opt/apps/com.hanvonchina.hanvonscan/files/bin/HanvonScan.sh &";
|
|
|
|
|
else if (0 == strcmp(oemName, HGVERSION_OEMNAME_LANXUM))
|
|
|
|
|
appPath = "sh /opt/apps/com.lanxumchina.lanxumscan/files/bin/LanxumScan.sh &";
|
|
|
|
|
else if (0 == strcmp(oemName, HGVERSION_OEMNAME_CUMTENN))
|
|
|
|
|
appPath = "sh /opt/apps/com.cumtennchina.cumtennscan/files/bin/CumtennScan.sh &";
|
|
|
|
|
else if (0 == strcmp(oemName, HGVERSION_OEMNAME_MICROTEK))
|
|
|
|
|
appPath = "sh /opt/apps/com.microtekchina.microtekscan-ex/files/bin/MicrotekScan.sh &";
|
|
|
|
|
else if (0 == strcmp(oemName, HGVERSION_OEMNAME_UNIS))
|
|
|
|
|
appPath = "sh /opt/apps/com.unischina.uniscan/files/bin/UniScan.sh &";
|
|
|
|
|
else
|
|
|
|
|
appPath = "sh /opt/apps/com.huagaochina.huagoscan/files/bin/HuaGoScan.sh &";
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (0 == strcmp(oemName, HGVERSION_OEMNAME_HANVON))
|
|
|
|
|
appPath = "sh /opt/apps/scanner-driver-hanvon/bin/HanvonScan.sh &";
|
|
|
|
|
else if (0 == strcmp(oemName, HGVERSION_OEMNAME_LANXUM))
|
|
|
|
|
appPath = "sh /opt/apps/scanner-driver-lanxum/bin/LanxumScan.sh &";
|
|
|
|
|
else if (0 == strcmp(oemName, HGVERSION_OEMNAME_CUMTENN))
|
|
|
|
|
appPath = "sh /opt/apps/scanner-driver-cumtenn/bin/CumtennScan.sh &";
|
|
|
|
|
else if (0 == strcmp(oemName, HGVERSION_OEMNAME_MICROTEK))
|
|
|
|
|
appPath = "sh /opt/apps/scanner-driver-microtek-ex/bin/MicrotekScan.sh &";
|
|
|
|
|
else if (0 == strcmp(oemName, HGVERSION_OEMNAME_UNIS))
|
|
|
|
|
appPath = "sh /opt/apps/scanner-driver-unis/bin/UniScan.sh &";
|
|
|
|
|
else
|
|
|
|
|
appPath = "sh /opt/apps/scanner-driver-huagao/bin/HuaGoScan.sh &";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
system(appPath.c_str());
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return HGBASE_ERR_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2022-09-29 03:13:13 +00:00
|
|
|
|
HGResult HGAPI HGVersion_GetDriverVersionList(HGVersionMgr mgr, const HGChar* devType, HGVersionInfo** info, HGUInt* count)
|
|
|
|
|
{
|
|
|
|
|
if (NULL == mgr)
|
|
|
|
|
{
|
|
|
|
|
return HGBASE_ERR_INVALIDARG;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGVersionMgrImpl* versionMgrImpl = (HGVersionMgrImpl*)mgr;
|
|
|
|
|
return versionMgrImpl->GetDriverVersionList(devType, info, count);
|
2023-04-13 10:10:06 +00:00
|
|
|
|
}
|