回答
據我所知,QProcess不會允許你這樣做(除非你自己催生了這個過程),事實上Qt中沒有任何東西。但是的Win32 API提供一種方式來實現你想要通過EnumProcesses
功能和如何使用它在微軟網站提供了一個完整的例子是什麼:
http://msdn.microsoft.com/en-us/library/ms682623.aspx
得到你需要用下面的函數替換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;
}
關注downvote的評論? – jaho
+1來補償downvote;不知道爲什麼這是downvoted。我將在我的回覆中包含指向同一頁面的鏈接。這當然是官方的做法。 –
一個快速和骯髒的方式做到這一點是隻檢查tasklist
輸出,是這樣的:
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));
}
使用EnumProcesses
可能是一種更好的方法(即,更「純」的;當然更高性能),但是這可能是「足夠好」,只要這不是在大循環或什麼東西中被調用。同樣的想法也可以移植到其他平臺上,但顯然命令工具和解析邏輯會有所不同。
//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";
- 1. 檢查Qt C++應用程序是否以sudo運行
- 2. 檢查進程是否正在運行(使用進程名稱)
- 3. 如何使用C++檢查進程是否在運行
- 4. C程序 - 如何檢查Web服務是否正在運行
- 5. C++:如何檢查外部程序是否在運行?
- 6. 如何檢查應用程序是否正在運行,否則運行它?
- 7. 檢查程序是否正在運行
- 8. 檢查程序是否正在運行
- 9. 如何檢查WPF應用程序是否已在運行?
- 10. android:如何檢查應用程序是否在後臺運行
- 11. 如何檢查SWF是否作爲AIR應用程序運行?
- 12. 如何檢查應用程序是否真的在運行?
- 13. 如何檢查應用程序是否通過SBT運行?
- 14. 如何檢查是否應用程序運行
- 15. 如何使用VB腳本檢查進程是否在運行?
- 16. 如何檢查一個進程是否使用Delphi運行?
- 17. 如何檢查進程是否從C++代碼運行?
- 18. 如何檢查一個線程是否在C#中運行?
- 19. 如何檢查進程是否仍在c內核中運行?
- 20. C++如何檢查Outlook進程是否已在運行
- 21. 如何檢查程序是否運行並且用戶是否存在?
- 22. Qt - 如何檢測應用程序是否在GNOME或KDE上運行?
- 23. 如何檢查是否有任何程序使用python運行在窗口中
- 24. 如何使用[[NSAppleScript alloc] initWithSource來檢查應用程序是否正在運行:
- 25. 如何檢查應用程序是否已經在使用vb.net運行..?
- 26. 如何檢查某人是否正在運行我的程序?
- 27. 如何檢查調度程序備份是否成功運行
- 28. 如何檢查程序是否從控制檯運行?
- 29. 如何定期檢查程序是否在Windows中運行?
- 30. 如何檢查程序是否從自動啓動運行?
[這個問題](http://stackoverflow.com/questions/10422145/how-to-check-if-a-process-is-running-or-not)似乎只要你有對象,就適合你的需求。 – chris
是的,但我不知道如何使用QProcess :: state(),那樣?另外,QProcess ::狀態( 「的chrome.exe」); ?? – Random78952
大概你可以通過使用某個函數的進程名來獲得一個'QProcess'對象,然後調用它。 – chris