1. 程式人生 > >Qt應用程式如何監測另一個程式狀態?(windows系統)

Qt應用程式如何監測另一個程式狀態?(windows系統)

以前在做專案時有用過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.
ConstantValueDescription
QProcess::NotRunning0The process is not running.
QProcess::Starting1The process is starting, but the program has not yet been invoked.
QProcess::Running2The process is running and is ready for reading and writing.
可是我發現沒辦法獲得這個程序, 因為這個程式不是由我啟動的。只能想別的辦法了,想想平時經常使用工作管理員關閉程序。那是不是隻要查詢管理器中有沒有要啟動的程序就可以了? 測試發現啟動工作管理員也沒用,無法獲取程序列表,而且彈出一個工作管理員也不是我們想要的。無奈只能求助萬能的網友,認識了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());最後通過輸出的資訊來判斷是否已啟動程式。如果沒有啟動則提示: