#include "stdafx.h" #include "CLMS.h" #include "logger.h" using namespace std; #ifdef _DEBUG #define new DEBUG_NEW #endif ///////////////////////////////////////////////////////////////////////////////动态引用 HINSTANCE m_hCLM; /// /// 功能:使用MORCODE.DLL前验证使用软件是否正确,否则其他函数都不可正常调用 /// /// 验证内容为软件指纹文件中字符串 /// /// TRUE :该软件可正常调用 /// FALSE :该软件不可正常调用 /// typedef BOOL(WINAPI* CLM_Login)(char* _Massage); CLM_Login m_pCLM_Login; /// /// 退出前执行一次,释放内存,记录使用信息 /// /// typedef BOOL(WINAPI* CLM_Logout)(); CLM_Logout m_pCLM_Logout; /// /// 自动检查电脑中是否有当前软件的许可信息,过期/非本机电脑/其他软件 的许可证书都不会识别 /// /// /// TRUE :有该软件许可证书 /// FALSE :没有该软件许可证书 /// typedef BOOL(WINAPI* CLM_Login_Scope)(); CLM_Login_Scope m_pCLM_Login_Scope; /// /// 输入模块ID验证模块可用性,输入CLMS服务器中模块ID -1(如服务器中模块ID为1,则mod参数输入0) /// /// 模块ID-1 /// 暂无定义 /// /// TRUE :该模块可用 /// FALSE :该模块不可用 /// typedef BOOL(WINAPI* CLM_ModuleIsLicensed)(UINT16& _MOD, UINT16& _OnLineType); CLM_ModuleIsLicensed m_pCLM_ModuleIsLicensed; /// /// 获取到期日期 /// /// 月 /// 日 /// 年 /// typedef BOOL(WINAPI* CLM_GetWarrantyExpiration)(int& _Month, int& _Day, int& _Year); CLM_GetWarrantyExpiration m_pCLM_GetWarrantyExpiration; /// /// 输入模块ID获取该模块过期时间,输入CLMS服务器中模块ID -1(如服务器中模块ID为1,则mod参数输入0) /// /// 模块ID-1 /// 日 /// 月 /// 年 /// /// TRUE :时间有效 /// FALSE :该软件不可正常调用 /// 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; // 授权不通过 } }