软件加锁(注册表进行时间加锁)

项目开发中有时会需要对软件加锁或者是使用日期。以下一种加锁的方式,通过注册表进行时间加锁,但是缺点在于只要换新机器或者重装系统情况下会造成加锁失败。

#include <QObject>

#define startname                   "B890E289-52B6-4798-9417-9DC9E22CA58A"		//创建的第一次注册表名称
#define endname                     "EB528F9D-5BD0-49E1-B96E-9B14F51E9A66"		//创建的最新注册表名称

class licence : public QObject
{
	Q_OBJECT

public:
	licence();
	~licence();

public:
	void detection_regrdit();
	void set_regedit(QString keyName, QString regvalue);
	void update_regedit();
	bool licence_valid();

private:
	QString regPath = "HKEY_CURRENT_USER";//创建的注册表路径
};
#include "licence.h"
#include <QSettings>
#include <QTime>
#include <QMessageBox>

licence::licence(){detection_regrdit();}

licence::~licence(){}

void licence::detection_regrdit()
{
	QDateTime time = QDateTime::currentDateTime();
	int myyime = time.toTime_t();	
	time.setTime_t(myyime);
	
	bool start_key = false;
	bool end_key = false;
	QSettings* programReg = new QSettings(regPath, QSettings::NativeFormat);
	QStringList keys = programReg->allKeys();//读取目录下所有键值

	for (int i = 0; i < keys.size(); i++) {//检测注册表键是否存在,不存在就创建
		QString id = keys.at(i);
		if (id.contains(startname))
		{
			start_key = true;
		}
		else if(id.contains(endname))
		{
			end_key = true;
		}
		if ((end_key == start_key) && (end_key == true))
		{
			break;
		}
	}

	if (start_key == false)
	{
		QDateTime time = QDateTime::currentDateTime();
		int mytime = time.toTime_t();
		set_regedit(startname, QString::number(mytime));//写注册表
		QString currentTime = time.toString("yyyy-MM-dd hh:mm:ss ddd");
	}

	if (end_key == false)
	{
		QDateTime time = QDateTime::currentDateTime();
		time = time.addDays(60);			//授权时间90天
		int mytime = time.toTime_t();
		set_regedit(endname, QString::number(mytime));//写注册表
		QString currentTime = time.toString("yyyy-MM-dd hh:mm:ss ddd");
	}
	delete programReg;
	
}

void licence::set_regedit(QString keyName, QString regvalue)
{
	//QString regeditFileName = regPath  + keyName;
	QSettings* writeReg = new QSettings(regPath, QSettings::NativeFormat);
	writeReg->setValue(keyName, regvalue);//写注册表
	delete writeReg;
}

void licence::update_regedit()
{
 	QSettings* ReadReg = new QSettings(regPath, QSettings::NativeFormat);
 	QString value = ReadReg->value(startname).toString();//读注册表
 	delete ReadReg;

	QDateTime time;
	time.setTime_t(value.toInt());
	QDateTime currenttime = QDateTime::currentDateTime();
	int mytime = currenttime.toTime_t();
	//修改开始时间  开始时间大约最初的开始时间才可以修改
	if (currenttime > time)
	{
		set_regedit(startname, QString::number(mytime));//写注册表
	}
}

bool licence::licence_valid()
{
	QSettings* startReg = new QSettings(regPath, QSettings::NativeFormat);
	QString start = startReg->value(startname).toString();//读注册表
	delete startReg;

	QSettings* endReg = new QSettings(regPath, QSettings::NativeFormat);
	QString end = endReg->value(endname).toString();//读注册表
	delete endReg;

	QDateTime startTime, endTime;
	startTime.setTime_t(start.toInt());
	endTime.setTime_t(end.toInt());
	if (endTime > startTime)
	{
		return true;
	}
	else
	{
		QMessageBox::information(NULL, u8"授权时间", u8"授权时间过期", QMessageBox::Ok);
		return false;
	}
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值