C++ 自动重启程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <QCoreApplication>
#include <QObject>
#include <QTimer>
#include <QString>
#include <iostream>
#include <windows.h>
#include <tlhelp32.h>
 
QString fullname;
 
void check_and_restart(){
    PROCESSENTRY32 pe32;
    pe32.dwSize = sizeof(pe32);
 
    HANDLE snap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    if (snap == INVALID_HANDLE_VALUE){
        std::cout << "CreateToolhelp32Snapshot failed." << std::endl;
        return;
    }
 
    BOOL more = ::Process32First(snap,&pe32);
    bool exists = false;
    QString name = fullname.mid(fullname.lastIndexOf(‘\\‘));
    while (more){
        if (name.compare(QString::fromWCharArray(pe32.szExeFile)) == 0){
            exists = true;
            break;
        }
        more = ::Process32Next(snap,&pe32);
    }
    ::CloseHandle(snap);
 
    if (!exists){
        STARTUPINFO si;
        PROCESS_INFORMATION pi;
        si.dwFlags = STARTF_USESHOWWINDOW;
        si.wShowWindow = TRUE;
        if (CreateProcess(fullname.toStdWString().c_str(),NULL,NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL,NULL,&si,&pi)){
            CloseHandle(pi.hThread);
            CloseHandle(pi.hProcess);
        }
    }
}
 
int main(int argc, char *argv[]){
    QCoreApplication a(argc, argv);
    if (argc < 2){
        std::cout << "wrong arguments." << std::endl;
    }
    fullname = QString(argv[1]);
    QTimer timer;
    QObject::connect(&timer, &QTimer::timeout, check_and_restart);
    timer.start(1000);
    return a.exec();
}

  

C++ 自动重启程序

上一篇:https://leetcode-cn.com/problems/roman-to-integer/submissions/


下一篇:Python爬虫(小练习)