深圳做棋牌網(wǎng)站建設(shè)軟文推廣的優(yōu)點(diǎn)
我們?cè)趯戃浖臅r(shí)候,希望我們的軟件只在固定的機(jī)器上運(yùn)行,其他機(jī)器上運(yùn)行不了,那我們應(yīng)該如何做呢?
1 首先我們需要得到運(yùn)行機(jī)器的mac地址,這樣可以簡(jiǎn)易的判斷是否是我們授權(quán)的機(jī)器。
那我們首先定義一個(gè)授權(quán)mac機(jī)器列表
QStringList listMac;
listMac<<"8C:EC:4B:C9:CE:AC"<<"9C:EC:4B:C9:CE:AC"<<"7C:EC:4B:C9:CE:AC";這部也可以修改為讀取遠(yuǎn)端數(shù)據(jù)庫,其他方法可以自己按照自己情況考慮。
2 讀取本機(jī)的mac信息,判斷本機(jī)的mac是否在授權(quán)范圍內(nèi)。
3 讀取注冊(cè)表里面軟件使用信息,我們可以用時(shí)間來判斷是否過了有效期,加入第一次使用,注冊(cè)表里面寫入注冊(cè)時(shí)間,下次進(jìn)來對(duì)比當(dāng)前時(shí)間和注冊(cè)時(shí)間之間的差值,是否過了有效期。
4 對(duì)注冊(cè)表的注冊(cè)信息進(jìn)行base64編碼。
下面上代碼:
#include <QNetworkInterface>
#include <QSettings>
#include <QCryptographicHash>
#include <QDateTime>
QStringList listMac;
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);listMac<<"8C:EC:4B:C9:CE:AC";ReadLocalInfo();
}Widget::~Widget()
{delete ui;
}QString Widget::ReadSystemTable()
{QString info;//通過寫入注冊(cè)表來判斷QSettings settings("HKEY_CURRENT_USER\\Software\\Code_Encryption\\Settings",QSettings::NativeFormat);info = settings.value("remain_times").toString();return info;}
void Widget::WriteSystemTable()
{}
void Widget::ReadLocalInfo()
{QString macAddress;QList<QNetworkInterface> allInterfaces = QNetworkInterface::allInterfaces();for (auto &interface : allInterfaces) {// 通常, 我們選擇第一個(gè)非虛擬和非回環(huán)接口if (interface.flags().testFlag(QNetworkInterface::IsUp) &&!interface.flags().testFlag(QNetworkInterface::IsLoopBack)) {macAddress = interface.hardwareAddress();m_MacAddress = macAddress;break;}}if(!listMac.contains(macAddress)){qApp->exit();}m_nCount = ReadSystemTable();AnalysisLocalInfo();
}
void Widget::AnalysisLocalInfo()
{if(m_nCount.isEmpty()){QByteArray strInfo;QDateTime currentData = QDateTime::currentDateTime();QString strTemp = m_MacAddress+"|"+currentData.toString("yyyy-MM-dd hh:mm:ss");strInfo = strTemp.toLocal8Bit();strInfo = strInfo.toBase64();QSettings settings("HKEY_CURRENT_USER\\Software\\Code_Encryption\\Settings",QSettings::NativeFormat);settings.setValue("remain_times",strInfo);}else{QByteArray strInfo = QByteArray::fromBase64(m_nCount.toLocal8Bit());QList<QByteArray> listInfo = strInfo.split('|');QDateTime lastData = QDateTime::fromString((QString)listInfo.at(1),"yyyy-MM-dd hh:mm:ss");QDateTime currentData = QDateTime::currentDateTime();if(currentData.secsTo(lastData)>=86400){qApp->exit();}qDebug()<<"lastData"<<lastData.toString("yyyy-MM-dd hh:mm:ss")<<"currentData"<<currentData.toString("yyyy-MM-dd hh:mm:ss");}}