添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

定义了一个CheckProcessThread类,该类继承自QThread,并在run()方法中实现了可执行文件的监测逻辑。在isProcessRunning()方法中,我们使用Windows API函数CreateToolhelp32Snapshot()和Process32First()/Process32Next()函数来遍历进程列表,查找可执行文件是否在运行。如果找到了该进程,我们返回true,否则返回false。

在main()方法中,我们创建了一个CheckProcessThread对象,并调用start()方法启动子线程。在子线程中,我们将不断地监测可执行文件是否在运行,直到子线程被中断。

需要注意的是,如果您使用Windows API函数来监测进程是否在运行,您需要包含Windows.h头文件。此外,Windows API函数可能会因为Windows版本不同而略微有所不同,因此您可能需要根据您的操作系统版本来调整代码。

//CheckProcessThread.h
#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);
//CheckProcessThread.cpp
#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)
  // 将QString转换为std::wstring
  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助手: 恭喜您写了第19篇博客,标题为“C++QT SqlLite数据库简单使用”。看到您不断输出优质的技术文章,我感到非常欣慰。建议您可以继续深入这个主题,分享更加专业的使用技巧和经验,让更多的读者受益。期待您更多的创作,谢谢您的分享。 CSDN 会根据你创作的博客的质量,给予优秀的博主博客红包奖励。请关注 https://bbs.csdn.net/forums/csdnnews?typeId=116148&utm_source=csdn_ai_ada_blog_reply19 看奖励名单。 C++ Qt关于多屏幕窗口处理 CSDN-Ada助手: 恭喜作者写出了这篇关于C++ Qt多屏幕窗口处理的博客,内容丰富,对读者们一定很有帮助。建议下一步可以继续深入研究其他相关主题,比如Qt的图形界面设计等,期待更多优质的文章。 CSDN 会根据你创作的博客的质量,给予优秀的博主博客红包奖励。请关注 https://bbs.csdn.net/forums/csdnnews?typeId=116148&utm_source=csdn_ai_ada_blog_reply18 看奖励名单。 malloc、free 和 new、delete 的区别 CSDN-Ada助手: 非常感谢用户分享这篇关于malloc、free 和 new、delete 的区别的博客。这篇文章非常有价值,对于想要深入了解内存管理的人来说,是一份非常好的参考。同时也祝贺用户能够持续不断地写出这样优秀的博客。 建议用户在未来的创作中,可以尝试更多地探索计算机科学的其他领域,比如操作系统、网络编程等等。这些领域也是非常有趣且有挑战性的,相信用户一定会有很多新的收获和发现。再次感谢用户的分享,期待更多优秀的文章! CSDN 会根据你创作的博客的质量,给予优秀的博主博客红包奖励。请关注 https://bbs.csdn.net/forums/csdnnews?typeId=116148&utm_source=csdn_ai_ada_blog_reply17 看奖励名单。 C++Qt windows系统托盘增加图标和功能 CSDN-Ada助手: 非常感谢作者的辛勤创作,这篇博客对于使用C++Qt进行windows系统托盘开发的开发者来说一定非常实用。同时,作者的文字表达清晰,讲解详细,让读者能够轻松理解。接下来,希望作者能够继续分享更多关于C++Qt开发的经验,让我们能够更快地学习和成长。祝愿作者越来越优秀! CSDN 会根据你创作的博客的质量,给予优秀的博主博客红包奖励。请关注 https://bbs.csdn.net/forums/csdnnews?typeId=116148&utm_source=csdn_ai_ada_blog_reply10 看奖励名单。 C++Qt 获取互联网时间 CSDN-Ada助手: 恭喜您写出如此有用的一篇博客!获取互联网时间对于很多开发者来说都是非常实用的技能。希望您能继续保持创作的热情,为大家分享更多有价值的技术文章。下一步,建议可以分享一些实用的C++ Qt开发技巧,或者介绍一些高级的应用。期待您的新作品! CSDN 会根据你创作的博客的质量,给予优秀的博主博客红包奖励。请关注 https://bbs.csdn.net/forums/csdnnews?typeId=116148&utm_source=csdn_ai_ada_blog_reply9 看奖励名单。