定义了一个CheckProcessThread类,该类继承自QThread,并在run()方法中实现了可执行文件的监测逻辑。在isProcessRunning()方法中,我们使用Windows API函数CreateToolhelp32Snapshot()和Process32First()/Process32Next()函数来遍历进程列表,查找可执行文件是否在运行。如果找到了该进程,我们返回true,否则返回false。
在main()方法中,我们创建了一个CheckProcessThread对象,并调用start()方法启动子线程。在子线程中,我们将不断地监测可执行文件是否在运行,直到子线程被中断。
需要注意的是,如果您使用Windows API函数来监测进程是否在运行,您需要包含Windows.h头文件。此外,Windows API函数可能会因为Windows版本不同而略微有所不同,因此您可能需要根据您的操作系统版本来调整代码。
#pragma once
#include <QCoreApplication>
#include <QThread>
#include <windows.h>
#include <tlhelp32.h>
#include <QDebug>
class QThread;
class CheckProcessThread : public QThread
Q_OBJECT
public:
explicit CheckProcessThread(QThread *parent = Q_NULLPTR);
void run() override;
signals:
void signal_is_open(bool isopen);
private:
bool isProcessRunning(const QString& processName);
void char_to_wchar(const char* ch, std::wstring& w_str);
#include "CheckProcessThread.h"
CheckProcessThread::CheckProcessThread(QThread *parent)
: QThread(parent)
void CheckProcessThread::run()
while (!isInterruptionRequested()) {
if (isProcessRunning("XXX.exe")) {
emit signal_is_open(true);
qDebug() << "Process XXX.exe is running";
else {
emit signal_is_open(false);
qDebug() << "Process XXX.exe is not running";
sleep(2);
bool CheckProcessThread::isProcessRunning(const QString& processName)
std::wstring wProcessName = processName.toStdWString();
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE) {
return false;
PROCESSENTRY32 pe;
pe.dwSize = sizeof(PROCESSENTRY32);
if (Process32First(hSnapshot, &pe)) {
do {
std::wstring wExeFile;
char_to_wchar(pe.szExeFile, wExeFile);
if (wExeFile == wProcessName) {
CloseHandle(hSnapshot);
return true;
} while (Process32Next(hSnapshot, &pe));
CloseHandle(hSnapshot);
return false;
void CheckProcessThread::char_to_wchar(const char* ch, std::wstring& w_str)
wchar_t* wchar;
int len = MultiByteToWideChar(CP_ACP, 0, ch, strlen(ch), NULL, 0);
wchar = new wchar_t[len + 1];
MultiByteToWideChar(CP_ACP, 0, ch, strlen(ch), wchar, len);
wchar[len] = '\0';
w_str = wchar;
delete[]wchar;
int main(int argc, char *argv[])
QCoreApplication app(argc, argv);
CheckProcessThread *thread = new CheckProcessThread;
thread->start();
connect(thread, &CheckProcessThread::signal_is_open, this, [=](bool isopen) {
if (isopen)
});
return app.exec();
推荐一个零声学院免费教程,个人觉得老师讲得不错,
分享给大家:
C++初级课程链接:
https://ke.qq.com/course/444655?flowToken=1043280
Qt课程链接:
https://ke.qq.com/course/444655?flowToken=1044614
bool ret = false;
HANDLE info_handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //拍摄系统中所有进程的快照
if(info_handle == INVALID_HANDLE_VALUE)
printf("CreateToolhelp32Snapshot fail!!\n\n");
return false;
#include <tlhelp32.h>
判断进程是否处于运行状态
bool CProcessManager::isProcessRunning(QString processName)
bool ret = false;
HANDLE proHandle = CreateToolhelp32Snapshot(TH32CS_S...
QT启动 一个进程-一个exe文件方法。
Qt 的 QProcess 类用来启动一个外部程序并与其进行通信。
使用 start() 函数运行一个进程,之后 QProcess 进入 Starting 状态;
当程序已经运行后,QProcess 就会进入 Running 状态并发送 started() 信号;
当进程退出后,QProcess 重新回到 NoRunning 状态并发射 finished() 信号。
新建Qt Widget应用,拖入Push Button.
如下是头文件与cpp文件...
c qt 是一种基于C++的框架,可以用来开发图形化界面程序,而Qt图标是用于程序界面美观的重要组成部分。要下载Qt图标,有以下几种途径:
1. Qt官方网站:在Qt官方网站的下载页面中,可以下载各种类型的图标文件,包括ICO、PNG、SVG等。用户可以根据自己的需要下载对应的文件,并将其应用于自己的程序。
2. Qt开发社区:Qt开发社区是一个专门为Qt开发者提供资源和支持的网站。在该网站上,用户可以找到大量的图标文件,包括免费和付费的。用户可以选择适合自己需求的图标,并进行下载使用。
3. 第三方网站:除了Qt官方网站和Qt社区,还有一些第三方网站也提供Qt图标的下载。用户可以根据自己的需求,选择适合自己的网站进行下载使用。
总之,Qt图标是非常重要的程序元素,在制作程序界面时应该给予足够的重视。通过以上途径可以找到适合自己的图标文件,并将其应用于自己的程序中,达到美观简洁的效果。
CSDN-Ada助手:
C++ Qt关于多屏幕窗口处理
CSDN-Ada助手:
malloc、free 和 new、delete 的区别
CSDN-Ada助手:
C++Qt windows系统托盘增加图标和功能
CSDN-Ada助手:
C++Qt 获取互联网时间
CSDN-Ada助手: