一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Qt上位機(jī)開發(fā)之如何讓自己的APP啟動與硬件信息綁定(Win端)

嵌入式應(yīng)用研究院 ? 來源:嵌入式應(yīng)用研究院 ? 作者:嵌入式應(yīng)用研究院 ? 2022-10-24 09:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在工作中,為了方便項目調(diào)試,一般情況下我們都會選擇開發(fā)一個上位機(jī)來實現(xiàn)簡單的控制和數(shù)據(jù)讀取的功能;但是,這個工具僅限于研發(fā)人員使用。為了防止別有用心的測試或者其它人員將這個APP通過U盤的形式拷貝走然后到另外一臺電腦上運行,我們可以有以下兩種簡單的設(shè)計方案(以下內(nèi)容默認(rèn)用戶已了解QT上位機(jī)開發(fā),故屏蔽許多細(xì)節(jié)):

(1)設(shè)計一個簡單的輸入密碼邏輯,當(dāng)輸入密碼與自己設(shè)定的密碼匹配時,即進(jìn)入軟件界面。這種方法比較簡單,也很容易被破解。

(2)提前通過另外一個軟件讀取本機(jī)的硬件信息(我們稱之為注冊機(jī)),然后通過某種編碼格式將該信息編碼為其它的格式并生成一個文件(將該文件放到系統(tǒng)較為隱蔽的目錄下)。當(dāng)我們使用的APP打開時,按照約定格式打開并將該文件里的數(shù)據(jù)轉(zhuǎn)換為硬件信息,然后進(jìn)行匹配,如果發(fā)現(xiàn)沒有該文件或者硬件信息不匹配,則提示軟件未注冊,否則,正常打開該軟件。

第一種方法比較簡單,初學(xué)QT應(yīng)用編程的小白都可以很容易將它實現(xiàn),我們就不多說了。我們重點來講解一下第二種方法的實現(xiàn)。

以下幾個命令可以在Window cmd上運行即可以看到對應(yīng)的信息:

獲取cpu名稱
wmiccpugetName
獲取cpu核心數(shù)
wmiccpugetNumberOfCores
獲取cpu線程數(shù)
wmiccpugetNumberOfLogicalProcessors
查詢cpu序列號
wmiccpugetprocessorid
查詢主板序列號
wmicbaseboardgetserialnumber
查詢BIOS序列號
wmicbiosgetserialnumber
查看硬盤
wmicdiskdrivegetserialnumber

這是我的電腦硬件信息:

a63a16b2-52d3-11ed-a3b6-dac502259ad0.png

其中,CPU序列號是一個唯一的ID號,它是廠家在制造CPU的時候燒入到內(nèi)部的。我在工作中主要使用這個來進(jìn)行加密,當(dāng)然你也可以使用其它的內(nèi)容。接下來我們可以實現(xiàn)一個簡單的注冊機(jī)邏輯:

實現(xiàn)獲取硬件信息接口

將硬件信息經(jīng)過Base64格式轉(zhuǎn)換

顯示Base64格式轉(zhuǎn)換為的結(jié)果

#include"mainwindow.h"
#include"ui_mainwindow.h"
#include

//獲取cpu名稱:wmic cpu get Name
//獲取cpu核心數(shù):wmic cpu get NumberOfCores
//獲取cpu線程數(shù):wmic cpu get NumberOfLogicalProcessors
//查詢cpu序列號:wmic cpu get processorid
//查詢主板序列號:wmic baseboard get serialnumber
//查詢BIOS序列號:wmic bios get serialnumber
//查看硬盤:wmic diskdrive get serialnumber
QStringMainWindow::getMachineInfo(constQString&cmd)
{
QProcessp;
p.start(cmd);
p.waitForFinished();
QStringresult=QString::fromLocal8Bit(p.readAllStandardOutput());
QStringListlist=cmd.split("");
result=result.remove(list.last(),Qt::CaseInsensitive);
result=result.replace("
","");
result=result.replace("
","");
result=result.simplified();
returnresult;
}

QByteArrayMainWindow::Encode(QByteArraydata)
{
returndata.toBase64();
}

MainWindow::MainWindow(QWidget*parent)
:QMainWindow(parent)
,ui(newUi::MainWindow)
{
ui->setupUi(this);
this->setWindowTitle("注冊機(jī)");
}

MainWindow::~MainWindow()
{
deleteui;
}


voidMainWindow::on_GenerateCode_clicked()
{
QStringCode=getMachineInfo("wmiccpugetprocessorid");
QFilefile("D:/Register.txt");
//打開文件,不存在則創(chuàng)建
file.open(QIODevice::ReadWrite|QIODevice::Text);
//寫入文件需要字符串為QByteArray格式
if(file.write(Encode(Code.toLatin1()))>0)
{
ui->CodeDisplay->setText(Encode(Code.toLatin1()));
QMessageBox::information(NULL,"提示","注冊成功",QMessageBox::Ok);
}
else
QMessageBox::information(NULL,"提示","注冊失敗",QMessageBox::Ok);
file.close();
}

編譯運行后,當(dāng)我們點擊生成注冊碼時,則會顯示硬件信息通過Base64編碼的結(jié)果,如下所示:

a6f5e734-52d3-11ed-a3b6-dac502259ad0.png

a73026ce-52d3-11ed-a3b6-dac502259ad0.png

一個簡單的注冊機(jī)寫完以后,APP在加載運行的時候需要加上以下邏輯:

#include"mainwindow.h"
#include

#defineARRAY_SIZE(x)(sizeof(x)/sizeof(x[0]))

QStringgetMachineInfo(constQString&cmd)
{
QProcessp;
p.start(cmd);
p.waitForFinished();
QStringresult=QString::fromLocal8Bit(p.readAllStandardOutput());
QStringListlist=cmd.split("");
result=result.remove(list.last(),Qt::CaseInsensitive);
result=result.replace("
","");
result=result.replace("
","");
result=result.simplified();
returnresult;
}

intmain(intargc,char*argv[])
{
uint8_tRunFlag=0;
QByteArrayDecodeStr;
QStringCpuSerialNumber;
QApplicationa(argc,argv);
//1.獲取CPU序列號
CpuSerialNumber=getMachineInfo("wmiccpugetprocessorid");
//2.打開注冊碼文件,讀取加密字符串并進(jìn)行匹配加密字符串
QFilefile("D:/Register.txt");
if(!file.open(QIODevice::ReadOnly))
{
QMessageBox::warning(NULL,"Error","注冊碼不存在,請導(dǎo)入注冊碼!",QMessageBox::Yes);
return-1;
}
else
{
//讀取文件所有的內(nèi)存
QByteArrayEncodeStr=file.readAll();
//將讀取的內(nèi)容進(jìn)行解碼
DecodeStr=fromBase64(EncodeStr);
//將解碼的結(jié)果與當(dāng)前PC的CPU序列號進(jìn)行比較
QStringStr(DecodeStr);
if(0==Str.compare(CpuSerialNumber))
RunFlag=1;
}

//3.如果匹配成功,運行軟件
if(RunFlag)
{
MainWindoww;
w.show();
returna.exec();
}
else
{
QMessageBox::warning(NULL,"Error","注冊碼無效,請聯(lián)系廠商獲取注冊碼!",QMessageBox::Yes);
return-1;
}
return0;
}

實現(xiàn)注冊機(jī)更好的方案則可以直接將信息寫入注冊表,然后APP去注冊表中讀取相應(yīng)的內(nèi)容。關(guān)于硬件信息的加密和解密方式,用戶可以有其它的實現(xiàn)方法。

這里留一個問題,如何將APP啟動信息與其它平臺進(jìn)行關(guān)聯(lián)呢?例如Qt ARM端、Mac端、Android端?

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Window
    +關(guān)注

    關(guān)注

    0

    文章

    83

    瀏覽量

    37604
  • 上位機(jī)
    +關(guān)注

    關(guān)注

    27

    文章

    966

    瀏覽量

    55770
  • Qt
    Qt
    +關(guān)注

    關(guān)注

    2

    文章

    314

    瀏覽量

    39054
  • 注冊機(jī)
    +關(guān)注

    關(guān)注

    9

    文章

    55

    瀏覽量

    23938

原文標(biāo)題:Qt上位機(jī)開發(fā)之如何讓自己的APP啟動與硬件信息綁定(Win端)

文章出處:【微信號:嵌入式應(yīng)用研究院,微信公眾號:嵌入式應(yīng)用研究院】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    EtherCAT運動控制器上位機(jī)開發(fā)Python+Qt(三):PDO配置與SDO讀寫

    PC上位機(jī)Python+Qt混合編程實現(xiàn)PDO配置與SDO讀寫
    的頭像 發(fā)表于 08-21 15:56 ?2045次閱讀
    EtherCAT運動控制器<b class='flag-5'>上位</b><b class='flag-5'>機(jī)</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>之</b>Python+<b class='flag-5'>Qt</b>(三):PDO配置與SDO讀寫

    如何用QT開發(fā)一個USB3.0上位機(jī)

    如何用QT開發(fā)一個USB3.0上位機(jī)
    發(fā)表于 05-21 06:54

    QT從零開始作單片機(jī)上位機(jī)-串口調(diào)試助手+波形顯示

    第一章 QT開發(fā)環(huán)境搭建及工程文件建立前言:筆者本想用codeblock+QT搭建一個上位機(jī)開發(fā)
    發(fā)表于 01-12 19:13 ?20次下載
    <b class='flag-5'>QT</b>從零開始作單片機(jī)<b class='flag-5'>上位</b><b class='flag-5'>機(jī)</b>-串口調(diào)試助手+波形顯示

    基于QT的簡單的上位機(jī)

    。同樣的,我們也從編寫一個簡單的基于QT上位機(jī)來體會體會上位機(jī)開發(fā)及認(rèn)識認(rèn)識
    發(fā)表于 05-08 10:57 ?18次下載
    基于<b class='flag-5'>QT</b>的簡單的<b class='flag-5'>上位</b><b class='flag-5'>機(jī)</b>

    QTQT上位機(jī)串口編程

    QTQT上位機(jī)串口編程 最近因為項目需要,需要用到上位機(jī),通過串口與
    發(fā)表于 05-08 10:02 ?25次下載
    <b class='flag-5'>QT</b>篇<b class='flag-5'>QT</b><b class='flag-5'>上位</b><b class='flag-5'>機(jī)</b>串口編程

    QT|編寫一個簡單的上位機(jī)

    QT | 編寫一個簡單的上位機(jī) 時間 :2023-03-19文章目錄QT | 編寫一個簡單的上位機(jī)
    發(fā)表于 05-08 10:12 ?3次下載
    <b class='flag-5'>QT</b>|編寫一個簡單的<b class='flag-5'>上位</b><b class='flag-5'>機(jī)</b>

    QT實現(xiàn)簡單的上位機(jī)軟件

    最近項目要求寫上位機(jī)軟件,需要實現(xiàn)界面功能和串口讀寫。界面方面用過MFC(早忘記了),網(wǎng)上查閱資料后發(fā)現(xiàn)QT在5.1版本后有自帶的串口模塊,而且用QT實現(xiàn)簡單界面功能很容易上手(也就期
    發(fā)表于 05-08 09:54 ?4次下載
    <b class='flag-5'>QT</b>實現(xiàn)簡單的<b class='flag-5'>上位</b><b class='flag-5'>機(jī)</b>軟件

    STM32+ESP8266連接電腦Qt網(wǎng)絡(luò)上位機(jī)——QT

    本文簡單介紹下手寫網(wǎng)絡(luò)調(diào)試器并連接ESP8266模塊 上篇 : STM32+ESP8266連接電腦Qt網(wǎng)絡(luò)上位機(jī)——準(zhǔn)備工作 目錄 一、部分Qt代碼及實現(xiàn)過程 二、實現(xiàn)過程——使用
    發(fā)表于 05-09 14:22 ?21次下載
    STM32+ESP8266連接電腦<b class='flag-5'>Qt</b>網(wǎng)絡(luò)<b class='flag-5'>上位</b><b class='flag-5'>機(jī)</b>——<b class='flag-5'>QT</b>篇

    基于Qt的簡單arduino上位機(jī)

    準(zhǔn)備工作 一塊esp8266,安裝arduinoIDE、Qt、navecate、mysql/**若沒有mysql可直接采用sqllist。 QT上位機(jī) 通信協(xié)議采用UDP(TCP
    發(fā)表于 05-09 10:36 ?3次下載
    基于<b class='flag-5'>Qt</b>的簡單arduino<b class='flag-5'>上位</b><b class='flag-5'>機(jī)</b>

    QT設(shè)計風(fēng)速儀上位機(jī)實例

    本人之前所做項目需要使用風(fēng)速儀進(jìn)行風(fēng)速檢測,市面上所購買的風(fēng)速儀產(chǎn)品可以多通過串口與上位機(jī)進(jìn)行通信,為滿足后續(xù)需求且提高更高的靈活性,本人決定采用QT軟件自主開發(fā)風(fēng)速儀
    發(fā)表于 05-10 09:41 ?2次下載
    <b class='flag-5'>QT</b>設(shè)計風(fēng)速儀<b class='flag-5'>上位</b><b class='flag-5'>機(jī)</b>實例

    USB3.0開發(fā)bulkLoop上位機(jī)程序

    USB3.0開發(fā)bulkLoop上位機(jī)程序 一、開發(fā)測試軟件 硬件平臺:Cypress公司的C
    發(fā)表于 05-29 15:16 ?15次下載
    USB3.0<b class='flag-5'>開發(fā)</b><b class='flag-5'>之</b>bulkLoop<b class='flag-5'>上位</b><b class='flag-5'>機(jī)</b>程序

    STM32 IAP升級固件與上位機(jī)例程

    本例程實現(xiàn)功能: 1、IAP固件程序?qū)崿F(xiàn)固件APP搬移,跳轉(zhuǎn)至APP 2、APP固件程序?qū)崿F(xiàn)自定義功能,接收上位機(jī)下發(fā)的bin文件 3、
    發(fā)表于 05-29 16:26 ?20次下載
    STM32 IAP升級固件與<b class='flag-5'>上位</b><b class='flag-5'>機(jī)</b>例程

    QT上位機(jī)開發(fā)串口助手(下)

    接著嵌入式QT上位機(jī)開發(fā)串口助手(上)來完善一下串口助手的功能,上一篇博客已經(jīng)實現(xiàn)了自動獲取的功能了。 首先要在頭文件里面包含一下頭文件
    發(fā)表于 05-29 16:49 ?2次下載
    <b class='flag-5'>QT</b><b class='flag-5'>上位</b><b class='flag-5'>機(jī)</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>之</b>串口助手(下)

    Qt上位機(jī)開發(fā)實戰(zhàn)案例

    Qt Creator是一個用于Qt開發(fā)的輕量級跨平臺集成開發(fā)環(huán)境。 Qt Creator可帶來兩大關(guān)鍵益處: 提供首個專為支持跨
    的頭像 發(fā)表于 03-13 12:31 ?4320次閱讀
    <b class='flag-5'>Qt</b><b class='flag-5'>上位</b><b class='flag-5'>機(jī)</b><b class='flag-5'>開發(fā)</b>實戰(zhàn)案例

    EtherCAT運動控制器上位機(jī)Python+Qt(一):鏈接與單軸運動

    PC上位機(jī)Python+Qt混合編程,助力智能制造高效開發(fā)
    的頭像 發(fā)表于 07-31 09:43 ?846次閱讀
    EtherCAT運動控制器<b class='flag-5'>上位</b><b class='flag-5'>機(jī)</b><b class='flag-5'>之</b>Python+<b class='flag-5'>Qt</b>(一):鏈接與單軸運動