C++ 如何使用Qt(C+;+;)检查程序是否按其名称运行

C++ 如何使用Qt(C+;+;)检查程序是否按其名称运行,c++,qt,process,qt-creator,qprocess,C++,Qt,Process,Qt Creator,Qprocess,如何通过Qt(C++)检查程序名是否正在运行 QProcess::pid会做这项工作吗?我不知道如何使用它。请建议。据我所知,QProcess不允许您这样做(除非您自己生成了该流程),事实上Qt中没有任何内容允许您这样做。但是,Win32 API提供了一种通过EnumProcesses函数实现所需功能的方法,Microsoft网站提供了一个完整的使用示例: 若要获取,需要使用以下函数替换PrintProcessNameAndID: bool matchProcessName( DWORD pr

如何通过Qt(C++)检查程序名是否正在运行


QProcess::pid
会做这项工作吗?我不知道如何使用它。请建议。

据我所知,QProcess不允许您这样做(除非您自己生成了该流程),事实上Qt中没有任何内容允许您这样做。但是,Win32 API提供了一种通过
EnumProcesses
函数实现所需功能的方法,Microsoft网站提供了一个完整的使用示例:

若要获取,需要使用以下函数替换PrintProcessNameAndID:

bool matchProcessName( DWORD processID, std::string processName)
{
    TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");

    // Get a handle to the process.

    HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
                                   PROCESS_VM_READ,
                                   FALSE, processID );

    // Get the process name.

    if (NULL != hProcess )
    {
        HMODULE hMod;
        DWORD cbNeeded;

        if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), 
             &cbNeeded) )
        {
            GetModuleBaseName( hProcess, hMod, szProcessName, 
                               sizeof(szProcessName)/sizeof(TCHAR) );
        }
    }

    // Compare process name with your string        
    bool matchFound = !_tcscmp(szProcessName, processName.c_str() );

    // Release the handle to the process.    
    CloseHandle( hProcess );

    return matchFound;
}
bool matchProcessName(DWORD processID,std::string processName)
{
TCHAR szProcessName[MAX_PATH]=文本(“”);
//掌握这个过程。
HANDLE hProcess=OpenProcess(进程\查询\信息|
进程_VM _READ,
FALSE,processID);
//获取进程名称。
if(NULL!=hProcess)
{
hmodulehmod;
德沃德;
if(enumProcessModule(hProcess,&hMod,sizeof(hMod)),
&CBP(需要)
{
GetModuleBaseName(HPProcess、hMod、szProcessName、,
sizeof(szProcessName)/sizeof(TCHAR));
}
}
//将进程名称与字符串进行比较
bool matchFound=!\u tcscmp(szProcessName,processName.c_str());
//释放进程的句柄。
CloseHandle(hProcess);
返回匹配发现;
}

一种快速而肮脏的方法是只检查任务列表的输出,类似于:

bool isRunning(const QString &process) {
  QProcess tasklist;
  tasklist.start(
        "tasklist",
        QStringList() << "/NH" 
                      << "/FO" << "CSV" 
                      << "/FI" << QString("IMAGENAME eq %1").arg(process));
  tasklist.waitForFinished();
  QString output = tasklist.readAllStandardOutput();
  return output.startsWith(QString("\"%1").arg(process));
}
bool正在运行(常量字符串和过程){
QProcess任务列表;
tasklist.start(
“任务列表”,
QStringList()
//如何运行应用程序
bool ok=QProcess::startDetached(“C:\\TTEC\\CozxyLogger\\CozxyLogger.exe”);

只要你有对象,qDebug()似乎就适合你的需要。是的,但我不知道如何使用QProcess::state(),就像那样?QProcess::state(“chrome.exe”)?大概你可以使用一些函数通过进程名得到一个
QProcess
对象,然后调用它。你能举个例子吗?非常感谢你的回答:)可能会有帮助,我想。我还没有看到任何通过使用Qt函数按名称获取进程或获取所有运行进程的列表的情况。+1用于补偿否决票;不知道为什么会否决。我打算在回复中包含指向同一页面的链接。这当然是官方的方式。这不是问题的答案estion“如何检查程序是否正在运行……但无论如何,感谢您的输入。
 //How to Run App
 bool ok = QProcess::startDetached("C:\\TTEC\\CozxyLogger\\CozxyLogger.exe");
 qDebug() <<  "Run = " << ok;


 //How to Kill App
 system("taskkill /im CozxyLogger.exe /f");
 qDebug() << "Close";