深圳做棋牌網(wǎng)站建設軟文推廣的優(yōu)點
我們在寫軟件的時候,希望我們的軟件只在固定的機器上運行,其他機器上運行不了,那我們應該如何做呢?
1 首先我們需要得到運行機器的mac地址,這樣可以簡易的判斷是否是我們授權的機器。
那我們首先定義一個授權mac機器列表
QStringList listMac;
listMac<<"8C:EC:4B:C9:CE:AC"<<"9C:EC:4B:C9:CE:AC"<<"7C:EC:4B:C9:CE:AC";這部也可以修改為讀取遠端數(shù)據(jù)庫,其他方法可以自己按照自己情況考慮。
2 讀取本機的mac信息,判斷本機的mac是否在授權范圍內。
3 讀取注冊表里面軟件使用信息,我們可以用時間來判斷是否過了有效期,加入第一次使用,注冊表里面寫入注冊時間,下次進來對比當前時間和注冊時間之間的差值,是否過了有效期。
4 對注冊表的注冊信息進行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;//通過寫入注冊表來判斷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) {// 通常, 我們選擇第一個非虛擬和非回環(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");}}