热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Qt检测软件运行小程序

Qt–检测软件运行小程序GitHub:https:github.comLJJ931026MonitorStartup.git摘要Qt创建一个Qt工程使用一个线程来检测软件是否启动线
Qt – 检测软件运行小程序

GitHub:https://github.com/LJJ931026/MonitorStartup.git

  • 摘要
  • Qt创建一个Qt工程
  • 使用一个线程来检测软件是否启动
  • 线程间使用信号与槽进行通信
  • 利用tasklist命令来判断

描述

此软件适用于检测外部软件是否处于运行状态,如果没有运行则启动该外部软件

说明

软件详细参数 

属性
名称MonitorStartup
开发环境QT5.2
开发时间2017-12-27
开发人LJJ

图片展示

主界面:

界面中选择应用程序的路径或者程序名,直接点击开始监控即可,文本框显示实时信息。

《Qt - 检测软件运行小程序》

退出提示:
《Qt - 检测软件运行小程序》

运行时界面显示:
《Qt - 检测软件运行小程序》

最小化托盘时信息提示:
《Qt - 检测软件运行小程序》

右击托盘图标菜单:
《Qt - 检测软件运行小程序》

代码块

线程中代码:
void MonitorSaftware::run()
{
static long cnt = 0;
QProcess StartSW(this);
QStringList pn = PathName.split("/");
foreach (QString tmp, pn) {
if(!tmp.contains(".exe")) continue;
Name += tmp;
break;
}
msleep(3000);
while (1)
{
/*
* startDetached()中的程序路径必须"D:/software/wireShark/Wireshark.exe"或者"D:\\software\\wireShark\\Wireshark.exe"
* 注:或者配置程序的环境变量, 直接填写程序名称即可:cmd.exe
* 注:程序后面不加后缀也是可以的, "D:/software/wireShark/Wireshark"
* 注:如果路径中带有空格是不能启动程序的
* 注:如果路径中有空格,那个可以带参数便可以使用
* 注:建议使用路径方式(获取是否运行信息时只能使用这种方式):"D:/Anke - LJJ/Project/微震联合定位/采集软件/UnionSample/UnionSample/Release/UnionSample.exe";
* 注:这个需要在线程中实现,不能在注进程中写
*/
QString str = QString("第%1次检测").arg(cnt);
if(PathName == "") continue;
if(!PathName.contains(".exe")) continue;
if(Name == "") continue;
if(!Name.contains(".exe")) continue;
QString cmd = "tasklist";
QStringList arg;
arg <<"-fi" < StartSW.start(cmd, arg);
StartSW.waitForFinished();
QString info = QString::fromLocal8Bit(StartSW.readAllStandardOutput());
// 根据返回内容判断外部软件是否在运行
if(info.contains("没有运行的任务匹配指定标准")){
// 表示没有运行,启动该软件
StartSW.startDetached(PathName, QStringList(PathName));
emit sendMsg(str + ", 没有见到程序运行,正在开启程序...");
}
else {
qDebug() <<"程序已经在运行!";
emit sendMsg(str + ", 程序已经在运行...");
}
if(isExit)
break;
msleep(5000);
cnt++;
}
}
主程序中代码:
// 监控
void Widget::on_pushButton_monitor_clicked()
{
QString path = ui->lineEdit->text();
// 判断要检测的程序路径是否为空
if(path == "") {
QMessageBox::information(NULL, QString("提示"), QString("路径不能为空,请选择路径!"));
return;
}
// 再次判断是否含有应用程序
if(!path.contains(".exe")) {
QMessageBox::information(NULL, QString("提示"), QString("路径错误,请检查!"));
return;
}
if(ui->pushButton_monitor->text() == "开始监控") {
mthread.start();
emit sendMsg(path);
emit sendMsg("monitor");
ui->pushButton_monitor->setText("停止监控");
ui->lineEdit->setEnabled(false);
ui->pushButton_open->setEnabled(false);
}
else {
emit sendMsg("exit");
ui->pushButton_monitor->setText("开始监控");
ui->lineEdit->setEnabled(true);
ui->pushButton_open->setEnabled(true);
}
}
最小化托盘代码:
void Widget::closeEvent(QCloseEvent *e)
{
if(QMessageBox::information(NULL, QString("提示"), QString("是否最小化托盘?\n\n选择是最小化托盘,选择否退出"),
QMessageBox::Ok | QMessageBox::No) == QMessageBox::Ok) {
e->ignore();
MiniTray();
}
else {
e->accept();
}
}
void Widget::MiniTray()
{
this->hide();
QIcon icon = QIcon(":/icon/Monitor.png");
mSysTrayIcon.setIcon(icon); //将icon设到QSystemTrayIcon对象中
mSysTrayIcon.setToolTip("检测软件启动"); //当鼠标移动到托盘上的图标时,会显示此处设置的内容
mSysTrayIcon.show(); //在系统托盘显示此对象
mSysTrayIcon.showMessage("提示", "点击显示界面");
CreateMenu(); // 创建菜单
connect(&mSysTrayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
this, SLOT(ActivateSystemTray(QSystemTrayIcon::ActivationReason)));
}
// 右击最小化托盘菜单代码:
void Widget::CreateMenu()
{
MainFace = new QAction("主界面", this);
connect(MainFace, SIGNAL(triggered()), this, SLOT(MainInterface()));
Exit = new QAction("退出", this);
connect(Exit, SIGNAL(triggered()), this, SLOT(ExitProgram()));
menu = new QMenu(this);
menu->addAction(MainFace);
menu->addAction(Exit);
mSysTrayIcon.setContextMenu(menu);
}

欢迎探讨

邮箱:lijiangjun931026@outlook.com
或者在此博客留言

打赏

如果对您有帮助的话欢迎打赏哦^_^

《Qt - 检测软件运行小程序》《Qt - 检测软件运行小程序》


推荐阅读
author-avatar
mobiledu2502875803
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有