211 lines
5.7 KiB
C++
211 lines
5.7 KiB
C++
#include "stdafx.h"
|
|
#include "CLMS.h"
|
|
#include "logger.h"
|
|
using namespace std;
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#endif
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////动态引用
|
|
HINSTANCE m_hCLM;
|
|
/// <summary>
|
|
/// 功能:使用MORCODE.DLL前验证使用软件是否正确,否则其他函数都不可正常调用
|
|
/// </summary>
|
|
/// <param name="_Massage">验证内容为软件指纹文件中字符串</param>
|
|
/// <returns>
|
|
/// TRUE :该软件可正常调用
|
|
/// FALSE :该软件不可正常调用
|
|
/// </returns>
|
|
typedef BOOL(WINAPI* CLM_Login)(char* _Massage);
|
|
CLM_Login m_pCLM_Login;
|
|
|
|
/// <summary>
|
|
/// 退出前执行一次,释放内存,记录使用信息
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
typedef BOOL(WINAPI* CLM_Logout)();
|
|
CLM_Logout m_pCLM_Logout;
|
|
|
|
/// <summary>
|
|
/// 自动检查电脑中是否有当前软件的许可信息,过期/非本机电脑/其他软件 的许可证书都不会识别
|
|
/// </summary>
|
|
/// <returns>
|
|
/// TRUE :有该软件许可证书
|
|
/// FALSE :没有该软件许可证书
|
|
/// </returns>
|
|
typedef BOOL(WINAPI* CLM_Login_Scope)();
|
|
CLM_Login_Scope m_pCLM_Login_Scope;
|
|
|
|
/// <summary>
|
|
/// 输入模块ID验证模块可用性,输入CLMS服务器中模块ID -1(如服务器中模块ID为1,则mod参数输入0)
|
|
/// </summary>
|
|
/// <param name="_MOD">模块ID-1</param>
|
|
/// <param name="_OnLineType">暂无定义</param>
|
|
/// <returns>
|
|
/// TRUE :该模块可用
|
|
/// FALSE :该模块不可用
|
|
/// </returns>
|
|
typedef BOOL(WINAPI* CLM_ModuleIsLicensed)(UINT16& _MOD, UINT16& _OnLineType);
|
|
CLM_ModuleIsLicensed m_pCLM_ModuleIsLicensed;
|
|
|
|
/// <summary>
|
|
/// 获取到期日期
|
|
/// </summary>
|
|
/// <param name="_Month">月</param>
|
|
/// <param name="_Day">日</param>
|
|
/// <param name="_Year">年</param>
|
|
/// <returns></returns>
|
|
typedef BOOL(WINAPI* CLM_GetWarrantyExpiration)(int& _Month, int& _Day, int& _Year);
|
|
CLM_GetWarrantyExpiration m_pCLM_GetWarrantyExpiration;
|
|
|
|
/// <summary>
|
|
/// 输入模块ID获取该模块过期时间,输入CLMS服务器中模块ID -1(如服务器中模块ID为1,则mod参数输入0)
|
|
/// </summary>
|
|
/// <param name="_MOD">模块ID-1</param>
|
|
/// <param name="_Day">日</param>
|
|
/// <param name="_Month">月</param>
|
|
/// <param name="_Year">年</param>
|
|
/// <returns>
|
|
/// TRUE :时间有效
|
|
/// FALSE :该软件不可正常调用
|
|
/// </returns>
|
|
typedef BOOL(WINAPI* CLM_GetExpirationDateFor)(const int _MOD, int& _Day, int& _Month, int& _Year);
|
|
CLM_GetExpirationDateFor m_pCLM_GetExpirationDateFor;
|
|
|
|
BOOL CheckLicense()
|
|
{
|
|
m_hCLM = LoadLibrary(_T("MORCODE.dll"));
|
|
if (m_hCLM)
|
|
{
|
|
if (g_pLogger)
|
|
{
|
|
g_pLogger->SendAndFlushWithTime(L"MORCODE.dll Load Success");
|
|
}
|
|
|
|
//Production
|
|
m_pCLM_Login = (CLM_Login)GetProcAddress(m_hCLM, "CLM_Login");
|
|
m_pCLM_Logout = (CLM_Logout)GetProcAddress(m_hCLM, "CLM_Logout");
|
|
m_pCLM_Login_Scope = (CLM_Login_Scope)GetProcAddress(m_hCLM, "CLM_Login_Scope");
|
|
m_pCLM_ModuleIsLicensed = (CLM_ModuleIsLicensed)GetProcAddress(m_hCLM, "CLM_ModuleIsLicensed");
|
|
m_pCLM_GetExpirationDateFor = (CLM_GetExpirationDateFor)GetProcAddress(m_hCLM, "CLM_GetExpirationDateFor");
|
|
m_pCLM_GetWarrantyExpiration = (CLM_GetWarrantyExpiration)GetProcAddress(m_hCLM, "CLM_GetWarrantyExpiration");
|
|
}
|
|
else
|
|
{
|
|
if (g_pLogger)
|
|
{
|
|
g_pLogger->SendAndFlushWithTime(L"MORCODE.dll Load Failed");
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
//////////////////////////////////////////////////////////////////1登陆验证
|
|
BOOL res = FALSE;
|
|
//Metus软件
|
|
char* strLogin = "vravnhNYybkmDkHDPKhVIwbHMoqHktgqWHFkBTOUsZLLVLwaAOkPIFFoVffUnSqUkCApSxrWQmsKvYCdVUpZLOhuHshKFbUPezYYbyQCgUoHrFOaaLVSosAapdVagrfFSqDUzxCvVuSJodxkjBiCJdRUfhCIfyRzjLdTfkxtUHPYUHyQbzOaJFvdSbzLihYmuhLHFNUSbERcAFbnrvNQtZOCUSUnHFcySXzTbfqTgzeaWQrjoSTzEUYDkEUmqusV";
|
|
res = m_pCLM_Login(strLogin);
|
|
if (!res)
|
|
{
|
|
//登陆验证失败
|
|
if (g_pLogger) {
|
|
g_pLogger->SendAndFlushWithTime(L"登陆验证失败");
|
|
}
|
|
|
|
return res;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////2检查许可
|
|
res = m_pCLM_Login_Scope();
|
|
if (!res)
|
|
{
|
|
//检查许可失败
|
|
if (g_pLogger) {
|
|
g_pLogger->SendAndFlushWithTime(L"检查许可失败");
|
|
}
|
|
|
|
return res;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////3获取许可模块
|
|
UINT16 Mod = 7;// 对应模块ID,8为模块ID-1, 表示直线电机中间件
|
|
UINT16 OnLineType = 0;//许可状态
|
|
res = m_pCLM_ModuleIsLicensed(Mod, OnLineType);
|
|
if (!res)
|
|
{
|
|
//登陆验证失败
|
|
if (g_pLogger) {
|
|
g_pLogger->SendAndFlushWithTime(L"登陆验证失败");
|
|
}
|
|
|
|
return res;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////4获取许可最早到期日期
|
|
int ModuleID = 2;
|
|
int Year, Month, Day;
|
|
res = m_pCLM_GetWarrantyExpiration(Month, Day, Year);//获取过期时间
|
|
if (!res)
|
|
{
|
|
//登陆验证失败
|
|
if (g_pLogger) {
|
|
g_pLogger->SendAndFlushWithTime(L"获取过期时间失败");
|
|
}
|
|
|
|
return res;
|
|
}
|
|
//打印到期时间
|
|
CString expirationDate;
|
|
expirationDate.Format(_T("到期时间为:%d年%d月%d日"), Year, Month, Day);
|
|
if (g_pLogger) {
|
|
g_pLogger->SendAndFlushWithTime(expirationDate);
|
|
}
|
|
|
|
|
|
return res;
|
|
}
|
|
|
|
BOOL CheckLicense2()
|
|
{
|
|
// 获取当前系统时间
|
|
time_t now = time(0);
|
|
tm localTime;
|
|
localtime_s(&localTime, &now);
|
|
|
|
int currentYear = 1900 + localTime.tm_year;
|
|
int currentMonth = 1 + localTime.tm_mon;
|
|
int currentDay = localTime.tm_mday;
|
|
|
|
// 设定的到期时间
|
|
int expirationYear = 205; // 设定的到期年份
|
|
int expirationMonth = 3; // 设定的到期月份
|
|
int expirationDay = 15; // 设定的到期日期
|
|
|
|
// 计算当前时间和到期时间的差距(以天为单位)
|
|
tm expirationTime = { 0 };
|
|
expirationTime.tm_year = expirationYear - 1900;
|
|
expirationTime.tm_mon = expirationMonth - 1;
|
|
expirationTime.tm_mday = expirationDay;
|
|
|
|
time_t expiration = mktime(&expirationTime);
|
|
double difference = difftime(expiration, now) / (60 * 60 * 24); // 转换为天数
|
|
|
|
// 判断是否在一个月内
|
|
if (difference <= 30 && difference >= 0)
|
|
{
|
|
if (g_pLogger)
|
|
{
|
|
g_pLogger->SendAndFlushWithTime(L"授权通过:到期时间在一个月内");
|
|
}
|
|
return TRUE; // 授权通过
|
|
}
|
|
else
|
|
{
|
|
if (g_pLogger)
|
|
{
|
|
g_pLogger->SendAndFlushWithTime(L"授权不通过:到期时间超过一个月");
|
|
}
|
|
return FALSE; // 授权不通过
|
|
}
|
|
} |