From 3ea100dc59f19e738bbb151f7e2964d489639616 Mon Sep 17 00:00:00 2001 From: feiyangqingyun Date: Thu, 18 Jun 2020 08:34:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=A7=98=E9=92=A5=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=99=A8+=E7=A8=8B=E5=BA=8F=E5=AE=88=E6=8A=A4?= =?UTF-8?q?=E8=BF=9B=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 0snap/key.png | Bin 0 -> 19795 bytes 0snap/live.png | Bin 0 -> 10924 bytes README.md | 8 +- key/key.pro | 4 + key/keydemo/appkey.cpp | 122 +++++++++++++++++ key/keydemo/appkey.h | 40 ++++++ key/keydemo/frmmain.cpp | 22 +++ key/keydemo/frmmain.h | 25 ++++ key/keydemo/frmmain.ui | 39 ++++++ key/keydemo/keydemo.pro | 24 ++++ key/keydemo/main.cpp | 34 +++++ key/keytool/frmmain.cpp | 112 ++++++++++++++++ key/keytool/frmmain.h | 34 +++++ key/keytool/frmmain.ui | 156 ++++++++++++++++++++++ key/keytool/keytool.pro | 24 ++++ key/keytool/main.cpp | 30 +++++ key/snap/QQ截图20190226090503.png | Bin 0 -> 19795 bytes key/snap/QQ截图20190226090532.png | Bin 0 -> 13669 bytes key/snap/QQ截图20190226090557.png | Bin 0 -> 36274 bytes key/snap/QQ截图20190226090720.png | Bin 0 -> 38836 bytes live/live.pro | 4 + live/livedemo/applive.cpp | 66 +++++++++ live/livedemo/applive.h | 28 ++++ live/livedemo/frmmain.cpp | 12 ++ live/livedemo/frmmain.h | 22 +++ live/livedemo/frmmain.ui | 21 +++ live/livedemo/livedemo.pro | 24 ++++ live/livedemo/main.cpp | 34 +++++ live/livetool/app.cpp | 79 +++++++++++ live/livetool/app.h | 23 ++++ live/livetool/frmmain.cpp | 206 +++++++++++++++++++++++++++++ live/livetool/frmmain.h | 46 +++++++ live/livetool/frmmain.ui | 102 ++++++++++++++ live/livetool/livetool.pro | 24 ++++ live/livetool/main.cpp | 43 ++++++ live/livetool/main.ico | Bin 0 -> 67646 bytes live/livetool/main.qrc | 5 + live/livetool/trayicon.cpp | 99 ++++++++++++++ live/livetool/trayicon.h | 72 ++++++++++ live/snap/QQ截图20190302141124.png | Bin 0 -> 10924 bytes live/snap/QQ截图20190302141129.png | Bin 0 -> 16677 bytes live/snap/QQ截图20190302141147.png | Bin 0 -> 13291 bytes 42 files changed, 1582 insertions(+), 2 deletions(-) create mode 100644 0snap/key.png create mode 100644 0snap/live.png create mode 100644 key/key.pro create mode 100644 key/keydemo/appkey.cpp create mode 100644 key/keydemo/appkey.h create mode 100644 key/keydemo/frmmain.cpp create mode 100644 key/keydemo/frmmain.h create mode 100644 key/keydemo/frmmain.ui create mode 100644 key/keydemo/keydemo.pro create mode 100644 key/keydemo/main.cpp create mode 100644 key/keytool/frmmain.cpp create mode 100644 key/keytool/frmmain.h create mode 100644 key/keytool/frmmain.ui create mode 100644 key/keytool/keytool.pro create mode 100644 key/keytool/main.cpp create mode 100644 key/snap/QQ截图20190226090503.png create mode 100644 key/snap/QQ截图20190226090532.png create mode 100644 key/snap/QQ截图20190226090557.png create mode 100644 key/snap/QQ截图20190226090720.png create mode 100644 live/live.pro create mode 100644 live/livedemo/applive.cpp create mode 100644 live/livedemo/applive.h create mode 100644 live/livedemo/frmmain.cpp create mode 100644 live/livedemo/frmmain.h create mode 100644 live/livedemo/frmmain.ui create mode 100644 live/livedemo/livedemo.pro create mode 100644 live/livedemo/main.cpp create mode 100644 live/livetool/app.cpp create mode 100644 live/livetool/app.h create mode 100644 live/livetool/frmmain.cpp create mode 100644 live/livetool/frmmain.h create mode 100644 live/livetool/frmmain.ui create mode 100644 live/livetool/livetool.pro create mode 100644 live/livetool/main.cpp create mode 100644 live/livetool/main.ico create mode 100644 live/livetool/main.qrc create mode 100644 live/livetool/trayicon.cpp create mode 100644 live/livetool/trayicon.h create mode 100644 live/snap/QQ截图20190302141124.png create mode 100644 live/snap/QQ截图20190302141129.png create mode 100644 live/snap/QQ截图20190302141147.png diff --git a/0snap/key.png b/0snap/key.png new file mode 100644 index 0000000000000000000000000000000000000000..90be902df4fa3d6e4854ad1ded52f29281fa8f3c GIT binary patch literal 19795 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 EA0&dmRsaA1 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 4df967b..3999b64 100644 --- a/README.md +++ b/README.md @@ -40,8 +40,10 @@ | 33 | echartgauge | echart仪表盘含交互支持webkit及webengine | | 34 | ffmpegdemo | 视频流播放ffmpeg内核 | | 35 | vlcdemo | 视频流播放vlc内核 | -| 36 | designer | QtDesigner4源码 | -| 37 | netserver | 网络中转服务器 | +| 36 | key | 秘钥生成器 | +| 37 | live | 程序守护进程 | +| 38 | designer | QtDesigner4源码 | +| 39 | netserver | 网络中转服务器 | ### 二、学习群 1. **Qt交流大会群 853086607(雨田哥)** @@ -86,5 +88,7 @@ ![avatar](https://github.com/feiyangqingyun/QWidgetDemo/raw/master/0snap/imageswitch.gif) ![avatar](https://github.com/feiyangqingyun/QWidgetDemo/raw/master/0snap/ffmpegdemo.png) ![avatar](https://github.com/feiyangqingyun/QWidgetDemo/raw/master/0snap/vlcdemo.png) +![avatar](https://github.com/feiyangqingyun/QWidgetDemo/raw/master/0snap/key.png) +![avatar](https://github.com/feiyangqingyun/QWidgetDemo/raw/master/0snap/live.png) ![avatar](https://github.com/feiyangqingyun/QWidgetDemo/raw/master/0snap/netserver.jpg) ![avatar](https://github.com/feiyangqingyun/QWidgetDemo/raw/master/0snap/designer.png) \ No newline at end of file diff --git a/key/key.pro b/key/key.pro new file mode 100644 index 0000000..a5e8a85 --- /dev/null +++ b/key/key.pro @@ -0,0 +1,4 @@ +TEMPLATE = subdirs +CONFIG += ordered +SUBDIRS += keytool +SUBDIRS += keydemo diff --git a/key/keydemo/appkey.cpp b/key/keydemo/appkey.cpp new file mode 100644 index 0000000..064be08 --- /dev/null +++ b/key/keydemo/appkey.cpp @@ -0,0 +1,122 @@ +#include "appkey.h" +#include "qmutex.h" +#include "qfile.h" +#include "qtimer.h" +#include "qdatetime.h" +#include "qapplication.h" +#include "qmessagebox.h" + +AppKey *AppKey::self = NULL; +AppKey *AppKey::Instance() +{ + if (!self) { + QMutex mutex; + QMutexLocker locker(&mutex); + if (!self) { + self = new AppKey; + } + } + + return self; +} + +AppKey::AppKey(QObject *parent) : QObject(parent) +{ + keyData = ""; + keyUseDate = false; + keyDate = "2017-01-01"; + keyUseRun = false; + keyRun = 1; + keyUseCount = false; + keyCount = 10; + + timer = new QTimer(this); + timer->setInterval(1000); + connect(timer, SIGNAL(timeout()), this, SLOT(checkTime())); + startTime = QDateTime::currentDateTime(); +} + +void AppKey::start() +{ + //判断密钥文件是否存在,不存在则从资源文件复制出来,同时需要设置文件写权限 + QString keyName = qApp->applicationDirPath() + "/key.db"; + QFile keyFile(keyName); + if (!keyFile.exists() || keyFile.size() == 0) { + QMessageBox::critical(0, "错误", "密钥文件丢失,请联系供应商!"); + exit(0); + } + + //读取密钥文件 + keyFile.open(QFile::ReadOnly); + keyData = keyFile.readLine(); + keyFile.close(); + + //将从注册码文件中的密文解密,与当前时间比较是否到期 + keyData = getXorEncryptDecrypt(keyData, 110); + QStringList data = keyData.split("|"); + + if (data.count() != 6) { + QMessageBox::critical(0, "错误", "注册码文件已损坏,程序将自动关闭!"); + exit(0); + } + + keyUseDate = (data.at(0) == "1"); + keyDate = data.at(1); + keyUseRun = (data.at(2) == "1"); + keyRun = data.at(3).toInt(); + keyUseCount = (data.at(4) == "1"); + keyCount = data.at(5).toInt(); + + //如果启用了时间限制 + if (keyUseDate) { + QString nowDate = QDate::currentDate().toString("yyyy-MM-dd"); + if (nowDate > keyDate) { + QMessageBox::critical(0, "错误", "软件已到期,请联系供应商更新注册码!"); + exit(0); + } + } + + //如果启用了运行时间显示 + if (keyUseRun) { + timer->start(); + } +} + +void AppKey::stop() +{ + timer->stop(); +} + +void AppKey::checkTime() +{ + //找出当前时间与首次启动时间比较 + QDateTime now = QDateTime::currentDateTime(); + if (startTime.secsTo(now) >= (keyRun * 60)) { + QMessageBox::critical(0, "错误", "试运行时间已到,请联系供应商更新注册码!"); + exit(0); + } +} + +QString AppKey::getXorEncryptDecrypt(const QString &data, char key) +{ + //采用异或加密,也可以自行更改算法 + QByteArray buffer = data.toLatin1(); + int size = buffer.size(); + for (int i = 0; i < size; i++) { + buffer[i] = buffer.at(i) ^ key; + } + + return QLatin1String(buffer); +} + +bool AppKey::checkCount(int count) +{ + if (keyUseCount) { + if (count >= keyCount) { + QMessageBox::critical(0, "错误", "设备数量超过限制,请联系供应商更新注册码!"); + return false; + } + } + + return true; +} diff --git a/key/keydemo/appkey.h b/key/keydemo/appkey.h new file mode 100644 index 0000000..0f1d300 --- /dev/null +++ b/key/keydemo/appkey.h @@ -0,0 +1,40 @@ +#ifndef APPKEY_H +#define APPKEY_H + +#include +#include + +class QTimer; + +class AppKey : public QObject +{ + Q_OBJECT +public: + static AppKey *Instance(); + explicit AppKey(QObject *parent = 0); + +private: + static AppKey *self; + + QString keyData; //注册码密文 + bool keyUseDate; //是否启用运行日期时间限制 + QString keyDate; //到期时间字符串 + bool keyUseRun; //是否启用可运行时间限制 + int keyRun; //可运行时间 + bool keyUseCount; //是否启用设备数量限制 + int keyCount; //设备限制数量 + + QTimer *timer; //定时器判断是否运行超时 + QDateTime startTime; //程序启动时间 + +private slots: + void checkTime(); + QString getXorEncryptDecrypt(const QString &data, char key); + +public slots: + void start(); + void stop(); + bool checkCount(int count); +}; + +#endif // APPKEY_H diff --git a/key/keydemo/frmmain.cpp b/key/keydemo/frmmain.cpp new file mode 100644 index 0000000..f3893e7 --- /dev/null +++ b/key/keydemo/frmmain.cpp @@ -0,0 +1,22 @@ +#include "frmmain.h" +#include "ui_frmmain.h" +#include "appkey.h" + +frmMain::frmMain(QWidget *parent) : QWidget(parent), ui(new Ui::frmMain) +{ + ui->setupUi(this); +} + +frmMain::~frmMain() +{ + delete ui; +} + +void frmMain::on_btnAdd_clicked() +{ + QString name = ui->lineEdit->text().trimmed(); + ui->listWidget->addItem(name); + + //计算当前设备数量多少 + AppKey::Instance()->checkCount(ui->listWidget->count()); +} diff --git a/key/keydemo/frmmain.h b/key/keydemo/frmmain.h new file mode 100644 index 0000000..f190b7d --- /dev/null +++ b/key/keydemo/frmmain.h @@ -0,0 +1,25 @@ +#ifndef FRMMAIN_H +#define FRMMAIN_H + +#include + +namespace Ui { +class frmMain; +} + +class frmMain : public QWidget +{ + Q_OBJECT + +public: + explicit frmMain(QWidget *parent = 0); + ~frmMain(); + +private: + Ui::frmMain *ui; + +private slots: + void on_btnAdd_clicked(); +}; + +#endif // FRMMAIN_H diff --git a/key/keydemo/frmmain.ui b/key/keydemo/frmmain.ui new file mode 100644 index 0000000..b3cb5e6 --- /dev/null +++ b/key/keydemo/frmmain.ui @@ -0,0 +1,39 @@ + + + frmMain + + + + 0 + 0 + 400 + 300 + + + + frmMain + + + + + + + + + 测试设备 + + + + + + + 添加 + + + + + + + + + diff --git a/key/keydemo/keydemo.pro b/key/keydemo/keydemo.pro new file mode 100644 index 0000000..5c28892 --- /dev/null +++ b/key/keydemo/keydemo.pro @@ -0,0 +1,24 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2019-02-17T20:23:58 +# +#------------------------------------------------- + +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = keydemo +TEMPLATE = app +MOC_DIR = temp/moc +RCC_DIR = temp/rcc +UI_DIR = temp/ui +OBJECTS_DIR = temp/obj +DESTDIR = $$PWD/../bin +CONFIG += warn_off + +SOURCES += main.cpp +SOURCES += frmmain.cpp appkey.cpp +HEADERS += frmmain.h appkey.h +FORMS += frmmain.ui + diff --git a/key/keydemo/main.cpp b/key/keydemo/main.cpp new file mode 100644 index 0000000..497ac30 --- /dev/null +++ b/key/keydemo/main.cpp @@ -0,0 +1,34 @@ +#pragma execution_character_set("utf-8") +#include "frmmain.h" +#include "appkey.h" +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + a.setFont(QFont("Microsoft Yahei", 9)); + +#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0)) +#if _MSC_VER + QTextCodec *codec = QTextCodec::codecForName("gbk"); +#else + QTextCodec *codec = QTextCodec::codecForName("utf-8"); +#endif + QTextCodec::setCodecForLocale(codec); + QTextCodec::setCodecForCStrings(codec); + QTextCodec::setCodecForTr(codec); +#else + QTextCodec *codec = QTextCodec::codecForName("utf-8"); + QTextCodec::setCodecForLocale(codec); +#endif + + //启动密钥服务类 + AppKey::Instance()->start(); + + frmMain w; + w.setWindowTitle("密钥使用示例"); + w.show(); + + return a.exec(); +} diff --git a/key/keytool/frmmain.cpp b/key/keytool/frmmain.cpp new file mode 100644 index 0000000..38f2278 --- /dev/null +++ b/key/keytool/frmmain.cpp @@ -0,0 +1,112 @@ +#include "frmmain.h" +#include "ui_frmmain.h" +#include "qmessagebox.h" +#include "qfile.h" +#include "qprocess.h" +#include "qdebug.h" + +frmMain::frmMain(QWidget *parent) : QWidget(parent), ui(new Ui::frmMain) +{ + ui->setupUi(this); + this->initForm(); + qDebug() << this->getCpuName() << this->getCpuId() << this->getDiskNum(); +} + +frmMain::~frmMain() +{ + delete ui; +} + +void frmMain::initForm() +{ + QStringList min; + min << "1" << "5" << "10" << "20" << "30"; + for (int i = 1; i <= 24; i++) { + min << QString::number(i * 60); + } + + ui->cboxMin->addItems(min); + ui->cboxMin->setCurrentIndex(1); + ui->dateEdit->setDate(QDate::currentDate()); + + for (int i = 5; i <= 150; i = i + 5) { + ui->cboxCount->addItem(QString("%1").arg(i)); + } +} + +QString frmMain::getWMIC(const QString &cmd) +{ + //获取cpu名称:wmic cpu get Name + //获取cpu核心数:wmic cpu get NumberOfCores + //获取cpu线程数:wmic cpu get NumberOfLogicalProcessors + //查询cpu序列号:wmic cpu get processorid + //查询主板序列号:wmic baseboard get serialnumber + //查询BIOS序列号:wmic bios get serialnumber + //查看硬盘:wmic diskdrive get serialnumber + QProcess p; + p.start(cmd); + p.waitForFinished(); + QString result = QString::fromLocal8Bit(p.readAllStandardOutput()); + QStringList list = cmd.split(" "); + result = result.remove(list.last(), Qt::CaseInsensitive); + result = result.replace("\r", ""); + result = result.replace("\n", ""); + result = result.simplified(); + return result; +} + +QString frmMain::getCpuName() +{ + return getWMIC("wmic cpu get name"); +} + +QString frmMain::getCpuId() +{ + return getWMIC("wmic cpu get processorid"); +} + +QString frmMain::getDiskNum() +{ + return getWMIC("wmic diskdrive where index=0 get serialnumber"); +} + +QString frmMain::getXorEncryptDecrypt(const QString &data, char key) +{ + //采用异或加密,也可以自行更改算法 + QByteArray buffer = data.toLatin1(); + int size = buffer.size(); + for (int i = 0; i < size; i++) { + buffer[i] = buffer.at(i) ^ key; + } + + return QLatin1String(buffer); +} + +void frmMain::on_btnOk_clicked() +{ + bool useDate = ui->ckDate->isChecked(); + bool useRun = ui->ckRun->isChecked(); + bool useCount = ui->ckCount->isChecked(); + + if (!useDate && !useRun && !useCount) { + if (QMessageBox::question(this, "询问", "确定要生成没有任何限制的密钥吗?") != QMessageBox::Yes) { + return; + } + } + + QString strDate = ui->dateEdit->date().toString("yyyy-MM-dd"); + QString strRun = ui->cboxMin->currentText(); + QString strCount = ui->cboxCount->currentText(); + QString key = QString("%1|%2|%3|%4|%5|%6").arg(useDate).arg(strDate).arg(useRun).arg(strRun).arg(useCount).arg(strCount); + + QFile file(QApplication::applicationDirPath() + "/key.db"); + file.open(QFile::WriteOnly | QIODevice::Text); + file.write(getXorEncryptDecrypt(key, 110).toLatin1()); + file.close(); + QMessageBox::information(this, "提示", "生成密钥成功,将 key.db 文件拷贝到对应目录即可!"); +} + +void frmMain::on_btnClose_clicked() +{ + this->close(); +} diff --git a/key/keytool/frmmain.h b/key/keytool/frmmain.h new file mode 100644 index 0000000..21c44f2 --- /dev/null +++ b/key/keytool/frmmain.h @@ -0,0 +1,34 @@ +#ifndef FRMMAIN_H +#define FRMMAIN_H + +#include + +namespace Ui { +class frmMain; +} + +class frmMain : public QWidget +{ + Q_OBJECT + +public: + explicit frmMain(QWidget *parent = 0); + ~frmMain(); + +private: + Ui::frmMain *ui; + +private slots: + void initForm(); + QString getWMIC(const QString &cmd); + QString getCpuName(); + QString getCpuId(); + QString getDiskNum(); + QString getXorEncryptDecrypt(const QString &data, char key); + +private slots: + void on_btnOk_clicked(); + void on_btnClose_clicked(); +}; + +#endif // FRMMAIN_H diff --git a/key/keytool/frmmain.ui b/key/keytool/frmmain.ui new file mode 100644 index 0000000..622a854 --- /dev/null +++ b/key/keytool/frmmain.ui @@ -0,0 +1,156 @@ + + + frmMain + + + + 0 + 0 + 334 + 129 + + + + frmMain + + + + + + Qt::NoFocus + + + yyyy年MM月dd日 + + + true + + + + + + + + 80 + 0 + + + + Qt::NoFocus + + + 生成 + + + + 20 + 20 + + + + + + + + Qt::NoFocus + + + 时间限制 + + + + + + + Qt::NoFocus + + + 数量限制 + + + + + + + true + + + + + + + + 80 + 0 + + + + Qt::NoFocus + + + 关闭 + + + + 20 + 20 + + + + + + + + Qt::NoFocus + + + 运行限制 + + + + + + + true + + + + + + + 分钟自动关闭 + + + + + + + Qt::Vertical + + + + 20 + 24 + + + + + + + + Qt::Horizontal + + + + 1 + 108 + + + + + + + + + + diff --git a/key/keytool/keytool.pro b/key/keytool/keytool.pro new file mode 100644 index 0000000..16c64ae --- /dev/null +++ b/key/keytool/keytool.pro @@ -0,0 +1,24 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2019-02-17T20:23:58 +# +#------------------------------------------------- + +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = keytool +TEMPLATE = app +MOC_DIR = temp/moc +RCC_DIR = temp/rcc +UI_DIR = temp/ui +OBJECTS_DIR = temp/obj +DESTDIR = $$PWD/../bin +CONFIG += warn_off + +SOURCES += main.cpp +SOURCES += frmmain.cpp +HEADERS += frmmain.h +FORMS += frmmain.ui + diff --git a/key/keytool/main.cpp b/key/keytool/main.cpp new file mode 100644 index 0000000..265cb8d --- /dev/null +++ b/key/keytool/main.cpp @@ -0,0 +1,30 @@ +#pragma execution_character_set("utf-8") +#include "frmmain.h" +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + a.setFont(QFont("Microsoft Yahei", 9)); + +#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0)) +#if _MSC_VER + QTextCodec *codec = QTextCodec::codecForName("gbk"); +#else + QTextCodec *codec = QTextCodec::codecForName("utf-8"); +#endif + QTextCodec::setCodecForLocale(codec); + QTextCodec::setCodecForCStrings(codec); + QTextCodec::setCodecForTr(codec); +#else + QTextCodec *codec = QTextCodec::codecForName("utf-8"); + QTextCodec::setCodecForLocale(codec); +#endif + + frmMain w; + w.setWindowTitle("密钥生成工具"); + w.show(); + + return a.exec(); +} diff --git a/key/snap/QQ截图20190226090503.png b/key/snap/QQ截图20190226090503.png new file mode 100644 index 0000000000000000000000000000000000000000..90be902df4fa3d6e4854ad1ded52f29281fa8f3c GIT binary patch literal 19795 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 D4|R?N literal 0 HcmV?d00001 diff --git a/key/snap/QQ截图20190226090557.png b/key/snap/QQ截图20190226090557.png new file mode 100644 index 0000000000000000000000000000000000000000..c2ddaaf587f2b06c9404047b0a59f4e9df2332db GIT binary patch literal 36274 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 z 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 z AppLive::self; +AppLive *AppLive::Instance() +{ + if (self.isNull()) { + QMutex mutex; + QMutexLocker locker(&mutex); + if (self.isNull()) { + self.reset(new AppLive); + } + } + + return self.data(); +} + +AppLive::AppLive(QObject *parent) : QObject(parent) +{ + udpServer = new QUdpSocket(this); + + QString name = qApp->applicationFilePath(); + QStringList list = name.split("/"); + appName = list.at(list.count() - 1).split(".").at(0); +} + +void AppLive::readData() +{ + QByteArray tempData; + + do { + tempData.resize(udpServer->pendingDatagramSize()); + QHostAddress sender; + quint16 senderPort; + udpServer->readDatagram(tempData.data(), tempData.size(), &sender, &senderPort); + QString data = QLatin1String(tempData); + + if (data == "hello") { + udpServer->writeDatagram(QString("%1OK").arg(appName).toLatin1(), sender, senderPort); + } + } while (udpServer->hasPendingDatagrams()); +} + +bool AppLive::start(int port) +{ + bool ok = udpServer->bind(port); + if (ok) { + connect(udpServer, SIGNAL(readyRead()), this, SLOT(readData())); + qDebug() << TIMEMS << "Start AppLive Ok"; + } + + return ok; +} + +void AppLive::stop() +{ + udpServer->abort(); + disconnect(udpServer, SIGNAL(readyRead()), this, SLOT(readData())); +} diff --git a/live/livedemo/applive.h b/live/livedemo/applive.h new file mode 100644 index 0000000..304c746 --- /dev/null +++ b/live/livedemo/applive.h @@ -0,0 +1,28 @@ +#ifndef APPLIVE_H +#define APPLIVE_H + +#include + +class QUdpSocket; + +class AppLive : public QObject +{ + Q_OBJECT +public: + static AppLive *Instance(); + explicit AppLive(QObject *parent = 0); + +private: + static QScopedPointer self; + QUdpSocket *udpServer; + QString appName; + +private slots: + void readData(); + +public slots: + bool start(int port); + void stop(); +}; + +#endif // APPLIVE_H diff --git a/live/livedemo/frmmain.cpp b/live/livedemo/frmmain.cpp new file mode 100644 index 0000000..4115d9d --- /dev/null +++ b/live/livedemo/frmmain.cpp @@ -0,0 +1,12 @@ +#include "frmmain.h" +#include "ui_frmmain.h" + +frmMain::frmMain(QWidget *parent) : QWidget(parent), ui(new Ui::frmMain) +{ + ui->setupUi(this); +} + +frmMain::~frmMain() +{ + delete ui; +} diff --git a/live/livedemo/frmmain.h b/live/livedemo/frmmain.h new file mode 100644 index 0000000..ad1efe1 --- /dev/null +++ b/live/livedemo/frmmain.h @@ -0,0 +1,22 @@ +#ifndef FRMMAIN_H +#define FRMMAIN_H + +#include + +namespace Ui { +class frmMain; +} + +class frmMain : public QWidget +{ + Q_OBJECT + +public: + explicit frmMain(QWidget *parent = 0); + ~frmMain(); + +private: + Ui::frmMain *ui; +}; + +#endif // FRMMAIN_H diff --git a/live/livedemo/frmmain.ui b/live/livedemo/frmmain.ui new file mode 100644 index 0000000..9317247 --- /dev/null +++ b/live/livedemo/frmmain.ui @@ -0,0 +1,21 @@ + + + frmMain + + + + 0 + 0 + 400 + 300 + + + + frmMain + + + + + + + diff --git a/live/livedemo/livedemo.pro b/live/livedemo/livedemo.pro new file mode 100644 index 0000000..bb0cf6a --- /dev/null +++ b/live/livedemo/livedemo.pro @@ -0,0 +1,24 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2019-02-17T20:23:58 +# +#------------------------------------------------- + +QT += core gui network + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = livedemo +TEMPLATE = app +MOC_DIR = temp/moc +RCC_DIR = temp/rcc +UI_DIR = temp/ui +OBJECTS_DIR = temp/obj +DESTDIR = $$PWD/../bin +CONFIG += warn_off + +SOURCES += main.cpp +SOURCES += frmmain.cpp applive.cpp +HEADERS += frmmain.h applive.h +FORMS += frmmain.ui + diff --git a/live/livedemo/main.cpp b/live/livedemo/main.cpp new file mode 100644 index 0000000..52bee1d --- /dev/null +++ b/live/livedemo/main.cpp @@ -0,0 +1,34 @@ +#pragma execution_character_set("utf-8") +#include "frmmain.h" +#include "applive.h" +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + a.setFont(QFont("Microsoft Yahei", 9)); + +#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0)) +#if _MSC_VER + QTextCodec *codec = QTextCodec::codecForName("gbk"); +#else + QTextCodec *codec = QTextCodec::codecForName("utf-8"); +#endif + QTextCodec::setCodecForLocale(codec); + QTextCodec::setCodecForCStrings(codec); + QTextCodec::setCodecForTr(codec); +#else + QTextCodec *codec = QTextCodec::codecForName("utf-8"); + QTextCodec::setCodecForLocale(codec); +#endif + + //启动守护程序服务类 + AppLive::Instance()->start(6666); + + frmMain w; + w.setWindowTitle("守护程序使用示例"); + w.show(); + + return a.exec(); +} diff --git a/live/livetool/app.cpp b/live/livetool/app.cpp new file mode 100644 index 0000000..80ebdc7 --- /dev/null +++ b/live/livetool/app.cpp @@ -0,0 +1,79 @@ +#include "app.h" +#include "qsettings.h" +#include "qfile.h" + +QString App::ConfigFile = "config.ini"; +QString App::TargetAppName = "livedemo"; +int App::TargetAppPort = 6666; +bool App::ReStartExplorer = false; +int App::TimeoutCount = 3; +int App::ReStartCount = 0; +QString App::ReStartLastTime = "2019-01-01 00:00:00"; + +void App::readConfig() +{ + if (!checkConfig()) { + return; + } + + QSettings set(App::ConfigFile, QSettings::IniFormat); + set.beginGroup("BaseConfig"); + App::TargetAppName = set.value("TargetAppName", App::TargetAppName).toString(); + App::TargetAppPort = set.value("TargetAppPort", App::TargetAppPort).toInt(); + App::ReStartExplorer = set.value("ReStartExplorer", App::ReStartExplorer).toBool(); + App::TimeoutCount = set.value("TimeoutCount", App::TimeoutCount).toInt(); + App::ReStartCount = set.value("ReStartCount", App::ReStartCount).toInt(); + App::ReStartLastTime = set.value("ReStartLastTime", App::ReStartLastTime).toString(); + set.endGroup(); +} + +void App::writeConfig() +{ + QSettings set(App::ConfigFile, QSettings::IniFormat); + set.beginGroup("BaseConfig"); + set.setValue("TargetAppName", App::TargetAppName); + set.setValue("TargetAppPort", App::TargetAppPort); + set.setValue("ReStartExplorer", App::ReStartExplorer); + set.setValue("TimeoutCount", App::TimeoutCount); + set.setValue("ReStartCount", App::ReStartCount); + set.setValue("ReStartLastTime", App::ReStartLastTime); + set.endGroup(); +} + +bool App::checkConfig() +{ + //如果配置文件大小为0,则以初始值继续运行,并生成配置文件 + QFile file(App::ConfigFile); + if (file.size() == 0) { + writeConfig(); + return false; + } + + //如果配置文件不完整,则以初始值继续运行,并生成配置文件 + if (file.open(QFile::ReadOnly)) { + bool ok = true; + while (!file.atEnd()) { + QString line = file.readLine(); + line = line.replace("\r", ""); + line = line.replace("\n", ""); + QStringList list = line.split("="); + + if (list.count() == 2) { + if (list.at(1) == "") { + ok = false; + break; + } + } + } + + if (!ok) { + writeConfig(); + return false; + } + } else { + writeConfig(); + return false; + } + + return true; +} diff --git a/live/livetool/app.h b/live/livetool/app.h new file mode 100644 index 0000000..1ce5daa --- /dev/null +++ b/live/livetool/app.h @@ -0,0 +1,23 @@ +#ifndef APP_H +#define APP_H + +#include + +class App +{ +public: + static QString ConfigFile; //配置文件文件路径及名称 + static QString TargetAppName; //目标软件程序名称 + static int TargetAppPort; //目标软件通信端口 + static bool ReStartExplorer; //是否需要重启桌面 + static int TimeoutCount; //超时次数 + static int ReStartCount; //已重启次数 + static QString ReStartLastTime; //最后一次重启时间 + + static void readConfig(); //读取配置文件,在main函数最开始加载程序载入 + static void writeConfig(); //写入配置文件,在更改配置文件程序关闭时调用 + static bool checkConfig(); //校验配置文件 + +}; + +#endif // APP_H diff --git a/live/livetool/frmmain.cpp b/live/livetool/frmmain.cpp new file mode 100644 index 0000000..af16983 --- /dev/null +++ b/live/livetool/frmmain.cpp @@ -0,0 +1,206 @@ +#pragma execution_character_set("utf-8") +#include "frmmain.h" +#include "ui_frmmain.h" +#include "qtimer.h" +#include "qudpsocket.h" +#include "qsharedmemory.h" +#include "qprocess.h" +#include "qdatetime.h" +#include "qapplication.h" +#include "qdesktopservices.h" +#include "qmessagebox.h" +#if (QT_VERSION > QT_VERSION_CHECK(5,0,0)) +#include "qstandardpaths.h" +#endif + +#include "app.h" + +frmMain::frmMain(QWidget *parent) : QWidget(parent), ui(new Ui::frmMain) +{ + ui->setupUi(this); + this->initForm(); +} + +frmMain::~frmMain() +{ + delete ui; +} + +void frmMain::changeEvent(QEvent *event) +{ + //隐藏当前界面,最小化到托盘 + if(event->type() == QEvent::WindowStateChange) { + if(windowState() & Qt::WindowMinimized) { + hide(); + } + } + + QWidget::changeEvent(event); +} + +void frmMain::initForm() +{ + count = 0; + ok = false; + + //每秒钟定时询问心跳 + timerHeart = new QTimer(this); + timerHeart->setInterval(2000); + connect(timerHeart, SIGNAL(timeout()), this, SLOT(sendHearData())); + + //从6050端口开始,如果绑定失败则将端口加1,直到绑定成功 + udp = new QUdpSocket(this); + int port = 6050; + while(!udp->bind(port)) { + port++; + } + + connect(udp, SIGNAL(readyRead()), this, SLOT(readData())); + + if (App::TargetAppName.isEmpty()) { + ui->btnStart->setText("启动"); + ui->btnStart->setEnabled(false); + timerHeart->stop(); + } else { + ui->btnStart->setText("暂停"); + ui->btnStart->setEnabled(true); + timerHeart->start(); + } + + ui->txtAppName->setText(App::TargetAppName); + ui->txtAppName->setFocus(); +} + +void frmMain::sendHearData() +{ + udp->writeDatagram("hello", QHostAddress::LocalHost, App::TargetAppPort); + + //判断当前是否没有回复 + if (!ok) { + count++; + } else { + count = 0; + ok = false; + } + + //如果超过规定次数没有收到心跳回复,则超时重启 + if (count >= App::TimeoutCount) { + timerHeart->stop(); + + QSharedMemory mem(App::TargetAppName); + if (!mem.create(1)) { + killApp(); + } + + QTimer::singleShot(1000 , this, SLOT(killOther())); + QTimer::singleShot(3000 , this, SLOT(startApp())); + QTimer::singleShot(4000 , this, SLOT(startExplorer())); + } +} + +void frmMain::killApp() +{ + QProcess *p = new QProcess; + p->start(QString("taskkill /im %1.exe /f").arg(App::TargetAppName)); +} + +void frmMain::killOther() +{ + QProcess *p = new QProcess; + p->start(QString("taskkill /im %1.exe /f").arg("WerFault")); + + //重建缓存,彻底清除托盘图标 + if (App::ReStartExplorer) { + QProcess *p1 = new QProcess; + p1->start("taskkill /f /im explorer.exe"); + } +} + +void frmMain::startApp() +{ + if (ui->btnStart->text() == "开始" || ui->btnStart->text() == "启动") { + count = 0; + return; + } + + QProcess *p = new QProcess; + p->start(QString("\"%1/%2.exe\"").arg(qApp->applicationDirPath()).arg(App::TargetAppName)); + + count = 0; + ok = true; + timerHeart->start(); + + App::ReStartCount++; + App::ReStartLastTime = QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"); + App::writeConfig(); + + ui->labCount->setText(QString("已重启 %1 次").arg(App::ReStartCount)); + ui->labInfo->setText(QString("最后一次重启在 %1").arg(App::ReStartLastTime)); +} + +void frmMain::startExplorer() +{ + //取得操作系统目录路径,指定操作系统目录下的explorer程序,采用绝对路径,否则在64位操作系统下无效 +#if (QT_VERSION > QT_VERSION_CHECK(5,0,0)) + QString str = QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation); +#else + QString str = QDesktopServices::storageLocation(QDesktopServices::ApplicationsLocation); +#endif + + if (App::ReStartExplorer) { + str = QString("%1\\Windows\\explorer.exe").arg(str.mid(0, 2)); + QProcess *p = new QProcess(this); + p->start(str); + } +} + +void frmMain::readData() +{ + QByteArray tempData; + do { + tempData.resize(udp->pendingDatagramSize()); + udp->readDatagram(tempData.data(), tempData.size()); + QString data = QLatin1String(tempData); + if (data.right(2) == "OK") { + count = 0; + ok = true; + } + } while (udp->hasPendingDatagrams()); +} + +void frmMain::on_btnOk_clicked() +{ + App::TargetAppName = ui->txtAppName->text(); + if (App::TargetAppName == "") { + QMessageBox::critical(this, "提示", "应用程序名称不能为空!"); + ui->txtAppName->setFocus(); + return; + } + + App::writeConfig(); + ui->btnStart->setEnabled(true); +} + +void frmMain::on_btnStart_clicked() +{ + count = 0; + if (ui->btnStart->text() == "暂停") { + timerHeart->stop(); + ui->btnStart->setText("开始"); + } else { + timerHeart->start(); + ui->btnStart->setText("暂停"); + } +} + +void frmMain::on_btnReset_clicked() +{ + App::ReStartCount = 0; + App::ReStartLastTime = "2019-01-01 12:00:00"; + App::writeConfig(); + + ui->txtAppName->setText(App::TargetAppName); + ui->labCount->setText(QString("已重启 %1 次").arg(App::ReStartCount)); + ui->labInfo->setText(QString("最后一次重启在 %1").arg(App::ReStartLastTime)); + QMessageBox::information(this, "提示", "重置配置文件成功!"); +} diff --git a/live/livetool/frmmain.h b/live/livetool/frmmain.h new file mode 100644 index 0000000..f7a306d --- /dev/null +++ b/live/livetool/frmmain.h @@ -0,0 +1,46 @@ +#ifndef FRMMAIN_H +#define FRMMAIN_H + +#include + +class QUdpSocket; + +namespace Ui +{ + class frmMain; +} + +class frmMain : public QWidget +{ + Q_OBJECT + +public: + explicit frmMain(QWidget *parent = 0); + ~frmMain(); + +protected: + void changeEvent(QEvent *event); + +private: + Ui::frmMain *ui; + QTimer *timerHeart; //心跳定时器 + QUdpSocket *udp; //UDP通信对象 + int count; //计数 + bool ok; //是否正常 + +private slots: + void initForm(); + void sendHearData(); + void readData(); + void killApp(); + void killOther(); + void startApp(); + void startExplorer(); + +private slots: + void on_btnOk_clicked(); + void on_btnStart_clicked(); + void on_btnReset_clicked(); +}; + +#endif // FRMMAIN_H diff --git a/live/livetool/frmmain.ui b/live/livetool/frmmain.ui new file mode 100644 index 0000000..39df60c --- /dev/null +++ b/live/livetool/frmmain.ui @@ -0,0 +1,102 @@ + + + frmMain + + + + 0 + 0 + 288 + 125 + + + + false + + + + 6 + + + 6 + + + 6 + + + 6 + + + + + QFrame::Box + + + QFrame::Sunken + + + + + + + 70 + 0 + + + + 应用 + + + + + + + + 70 + 0 + + + + 暂停 + + + + + + + 重置 + + + + + + + + + + 最后一次重启在 + + + + + + + 已重启 0 次 + + + + + + + + + + + txtAppName + btnOk + btnStart + btnReset + + + + diff --git a/live/livetool/livetool.pro b/live/livetool/livetool.pro new file mode 100644 index 0000000..f11590b --- /dev/null +++ b/live/livetool/livetool.pro @@ -0,0 +1,24 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2019-02-15T14:34:50 +# +#------------------------------------------------- + +QT += core gui network + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = livetool +TEMPLATE = app +MOC_DIR = temp/moc +RCC_DIR = temp/rcc +UI_DIR = temp/ui +OBJECTS_DIR = temp/obj +DESTDIR = $$PWD/../bin +CONFIG += warn_off + +SOURCES += main.cpp frmmain.cpp trayicon.cpp app.cpp +HEADERS += frmmain.h trayicon.h app.h +FORMS += frmmain.ui +RESOURCES += main.qrc + diff --git a/live/livetool/main.cpp b/live/livetool/main.cpp new file mode 100644 index 0000000..8f258ff --- /dev/null +++ b/live/livetool/main.cpp @@ -0,0 +1,43 @@ +#pragma execution_character_set("utf-8") +#include "frmmain.h" +#include "trayicon.h" +#include "app.h" +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + a.setWindowIcon(QIcon(":/main.ico")); + +#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0)) +#if _MSC_VER + QTextCodec *codec = QTextCodec::codecForName("gbk"); +#else + QTextCodec *codec = QTextCodec::codecForName("utf-8"); +#endif + QTextCodec::setCodecForLocale(codec); + QTextCodec::setCodecForCStrings(codec); + QTextCodec::setCodecForTr(codec); +#else + QTextCodec *codec = QTextCodec::codecForName("utf-8"); + QTextCodec::setCodecForLocale(codec); +#endif + + frmMain w; + w.setWindowTitle("程序启动器"); + w.setFixedSize(w.sizeHint()); + + //启动托盘类 + TrayIcon::Instance()->setMainWidget(&w); + TrayIcon::Instance()->setIcon(":/main.ico"); + TrayIcon::Instance()->setToolTip(w.windowTitle()); + TrayIcon::Instance()->setVisible(true); + QObject::connect(&w, SIGNAL(destroyed(QObject *)), TrayIcon::Instance(), SLOT(closeAll())); + + App::ConfigFile = qApp->applicationDirPath() + "/config.ini"; + App::readConfig(); + App::TargetAppName.isEmpty() ? w.show() : w.hide(); + + return a.exec(); +} diff --git a/live/livetool/main.ico b/live/livetool/main.ico new file mode 100644 index 0000000000000000000000000000000000000000..100e0dc16b679d117cfae1b6666322baf24e3956 GIT binary patch literal 67646 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 literal 0 HcmV?d00001 diff --git a/live/livetool/main.qrc b/live/livetool/main.qrc new file mode 100644 index 0000000..91c2747 --- /dev/null +++ b/live/livetool/main.qrc @@ -0,0 +1,5 @@ + + + main.ico + + diff --git a/live/livetool/trayicon.cpp b/live/livetool/trayicon.cpp new file mode 100644 index 0000000..133f973 --- /dev/null +++ b/live/livetool/trayicon.cpp @@ -0,0 +1,99 @@ +#pragma execution_character_set("utf-8") + +#include "trayicon.h" +#include "qmutex.h" +#include "qmenu.h" +#include "qapplication.h" +#include "qdesktopwidget.h" +#include "qdebug.h" + +QScopedPointer TrayIcon::self; +TrayIcon *TrayIcon::Instance() +{ + if (self.isNull()) { + QMutex mutex; + QMutexLocker locker(&mutex); + if (self.isNull()) { + self.reset(new TrayIcon); + } + } + + return self.data(); +} + +TrayIcon::TrayIcon(QObject *parent) : QObject(parent) +{ + mainWidget = 0; + trayIcon = new QSystemTrayIcon(this); + connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), + this, SLOT(iconIsActived(QSystemTrayIcon::ActivationReason))); + menu = new QMenu(QApplication::desktop()); + exitDirect = true; +} + +void TrayIcon::iconIsActived(QSystemTrayIcon::ActivationReason reason) +{ + switch (reason) { + case QSystemTrayIcon::Trigger: + case QSystemTrayIcon::DoubleClick: { + mainWidget->showNormal(); + break; + } + + default: + break; + } +} + +bool TrayIcon::getVisible() const +{ + return trayIcon->isVisible(); +} + +void TrayIcon::setExitDirect(bool exitDirect) +{ + if (this->exitDirect != exitDirect) { + this->exitDirect = exitDirect; + } +} + +void TrayIcon::setMainWidget(QWidget *mainWidget) +{ + this->mainWidget = mainWidget; + menu->addAction("主界面", mainWidget, SLOT(showNormal())); + + if (exitDirect) { + menu->addAction("退出", this, SLOT(closeAll())); + } else { + menu->addAction("退出", this, SIGNAL(trayIconExit())); + } + + trayIcon->setContextMenu(menu); +} + +void TrayIcon::showMessage(const QString &title, const QString &msg, QSystemTrayIcon::MessageIcon icon, int msecs) +{ + trayIcon->showMessage(title, msg, icon, msecs); +} + +void TrayIcon::setIcon(const QString &strIcon) +{ + trayIcon->setIcon(QIcon(strIcon)); +} + +void TrayIcon::setToolTip(const QString &tip) +{ + trayIcon->setToolTip(tip); +} + +void TrayIcon::setVisible(bool visible) +{ + trayIcon->setVisible(visible); +} + +void TrayIcon::closeAll() +{ + trayIcon->hide(); + trayIcon->deleteLater(); + qApp->exit(); +} diff --git a/live/livetool/trayicon.h b/live/livetool/trayicon.h new file mode 100644 index 0000000..8487d81 --- /dev/null +++ b/live/livetool/trayicon.h @@ -0,0 +1,72 @@ +#ifndef TRAYICON_H +#define TRAYICON_H + +/** + * 托盘图标控件 作者:feiyangqingyun(QQ:517216493) 2017-1-8 + * 1:可设置托盘图标对应所属主窗体 + * 2:可设置托盘图标 + * 3:可设置提示信息 + * 4:自带右键菜单 + */ + +#include +#include + +class QMenu; + +#ifdef quc +#if (QT_VERSION < QT_VERSION_CHECK(5,7,0)) +#include +#else +#include +#endif + +class QDESIGNER_WIDGET_EXPORT TrayIcon : public QObject +#else +class TrayIcon : public QObject +#endif + +{ + Q_OBJECT +public: + static TrayIcon *Instance(); + explicit TrayIcon(QObject *parent = 0); + +private: + static QScopedPointer self; + QWidget *mainWidget; //对应所属主窗体 + QSystemTrayIcon *trayIcon; //托盘对象 + QMenu *menu; //右键菜单 + bool exitDirect; //是否直接退出 + +private slots: + void iconIsActived(QSystemTrayIcon::ActivationReason reason); + +public: + bool getVisible() const; + +public Q_SLOTS: + //设置是否直接退出,如果不是直接退出则发送信号给主界面 + void setExitDirect(bool exitDirect); + + //设置所属主窗体 + void setMainWidget(QWidget *mainWidget); + + //显示消息 + void showMessage(const QString &title, const QString &msg, + QSystemTrayIcon::MessageIcon icon = QSystemTrayIcon::Information, int msecs = 5000); + + //设置图标 + void setIcon(const QString &strIcon); + //设置提示信息 + void setToolTip(const QString &tip); + //设置是否可见 + void setVisible(bool visible); + //退出所有 + void closeAll(); + +Q_SIGNALS: + void trayIconExit(); +}; + +#endif // TRAYICON_H diff --git a/live/snap/QQ截图20190302141124.png b/live/snap/QQ截图20190302141124.png new file mode 100644 index 0000000000000000000000000000000000000000..b09a6779401f5293901c48e86f95e5fa78e7f34c GIT binary patch literal 10924 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 EA0&dmRsaA1 literal 0 HcmV?d00001 diff --git a/live/snap/QQ截图20190302141129.png b/live/snap/QQ截图20190302141129.png new file mode 100644 index 0000000000000000000000000000000000000000..29e2f25c8b3a83a9f01cf21d5f2b7efa17b63720 GIT binary patch literal 16677 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