tutorial smart remix programador online español curso c++ qt process qt-creator qprocess

smart - Cómo comprobar si un programa se ejecuta por su nombre con Qt(C++)



smart contracts ethereum (2)

Por lo que yo sé, QProcess no te permitirá hacer eso (a menos que hayas engendrado el proceso tú mismo) y de hecho nada en Qt lo hará. Sin embargo, Win32 API proporciona una forma de lograr lo que desea a través de la función EnumProcesses y un ejemplo completo de cómo usarlo se proporciona en el sitio web de Microsoft:

http://msdn.microsoft.com/en-us/library/ms682623.aspx

Para obtenerlo, reemplace PrintProcessNameAndID con la siguiente función:

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; }

Cómo comprobar si un programa se está ejecutando, por su nombre, con Qt (C ++).

¿ QProcess::pid el trabajo? No sé cómo usarlo. Por favor recomiende.


Una forma rápida y sucia de hacerlo sería simplemente verificar el resultado de la tasklist de tasklist , algo como:

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)); }

Usar EnumProcesses es probablemente una mejor manera (es decir, más "pura", sin duda más eficiente), pero esto puede ser "lo suficientemente bueno" siempre que no se lo llame en un ciclo grande o algo así. La misma idea también podría trasladarse a otras plataformas, aunque obviamente la herramienta de comando y la lógica de análisis serían diferentes.