Qt應用程式如何監測另一個程式狀態?(windows系統)
阿新 • • 發佈:2019-01-29
以前在做專案時有用過QProcess啟動一個應用程式。 在按下按鈕的槽函式中呼叫QProcess的start函式即可,非常的簡單。但是這次不一樣了,被呼叫的程式,並非我的程式啟動的。我需要先判斷它是否已經啟動了。那麼如何判斷呢?檢視幫助文件發現QProcess有個state()函式可以返回程序的狀態。QProcess::ProcessState QProcess::state () constReturns the current state of the process.enum QProcess::ProcessStateThis enum describes the different states ofQProcess.
可是我發現沒辦法獲得這個程序, 因為這個程式不是由我啟動的。只能想別的辦法了,想想平時經常使用工作管理員關閉程序。那是不是隻要查詢管理器中有沒有要啟動的程序就可以了? 測試發現啟動工作管理員也沒用,無法獲取程序列表,而且彈出一個工作管理員也不是我們想要的。無奈只能求助萬能的網友,認識了tasklist這東西,不僅可以查詢程序還能殺死程序。
那麼如何使用呢?檢視幫助 tasklist -FI "imagename eq xxx.exe" 這個命令可以顯示程序名為xxx.exe的資訊。看看程式碼如何寫:QProcess* process = new QProcess;process->start("tasklist" ,QStringList()<<"/FI"<<"imagename eq xxx.exe");process->waitForFinished();QString outputStr = QString::fromLocal8Bit(process->readAllStandardOutput());最後通過輸出的資訊來判斷是否已啟動程式。如果沒有啟動則提示:
Constant | Value | Description |
QProcess::NotRunning | 0 | The process is not running. |
QProcess::Starting | 1 | The process is starting, but the program has not yet been invoked. |
QProcess::Running | 2 | The process is running and is ready for reading and writing. |
那麼如何使用呢?檢視幫助 tasklist -FI "imagename eq xxx.exe" 這個命令可以顯示程序名為xxx.exe的資訊。看看程式碼如何寫:QProcess* process = new QProcess;process->start("tasklist" ,QStringList()<<"/FI"<<"imagename eq xxx.exe");process->waitForFinished();QString outputStr = QString::fromLocal8Bit(process->readAllStandardOutput());最後通過輸出的資訊來判斷是否已啟動程式。如果沒有啟動則提示: