Files
2025-02-20 16:22:10 +08:00

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; // 授权不通过
}
}