溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

QT怎么判斷另外一個(gè)進(jìn)程在運(yùn)行

發(fā)布時(shí)間:2021-12-15 09:42:18 來(lái)源:億速云 閱讀:952 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹“QT怎么判斷另外一個(gè)進(jìn)程在運(yùn)行”,在日常操作中,相信很多人在QT怎么判斷另外一個(gè)進(jìn)程在運(yùn)行問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”QT怎么判斷另外一個(gè)進(jìn)程在運(yùn)行”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

Qt庫(kù)似乎沒(méi)有完整的跨平臺(tái)解決方案,你可能需要自己分平臺(tái)判斷。

windows可以使用上述提到的方法使用openprocess獲取相關(guān)信息。終止很簡(jiǎn)單:

ShellExecute(0, "open","TASKKILL",(processname,NULL, SW_HIDE); 

其他平臺(tái)需要想辦法找到進(jìn)程的pid(例如調(diào)用系統(tǒng)的ps命令進(jìn)行過(guò)濾查找),

linux打開(kāi)/proc/pid/cmdline查看進(jìn)程狀態(tài)。

sun系統(tǒng)打開(kāi)/proc/pid/psinfo查看進(jìn)程狀態(tài)。

---------------------------WIN平臺(tái)------------------------------------------------

附代碼:

const   char   DESTPROC[19]   =   "cmd.exe";    
DWORD   pid   =   ProcessToPID(DESTPROC);    
返回為0就是沒(méi)有  


  1. DWORD ProcessToPID(const char *InputProcessName) 


  2.   DWORD aProcesses[1024], cbNeeded, cProcesses; 

  3.   unsigned int i; 

  4.   HANDLE hProcess = NULL; 

  5.   HMODULE hMod = NULL; 

  6.   char szProcessName[MAX_PATH] = "UnknownProcess"; 


  7.   AddPrivilege(SE_DEBUG_NAME); 


  8.   // 計(jì)算目前有多少進(jìn)程, aProcesses[]用來(lái)存放有效的進(jìn)程PIDs 

  9.   if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) 

  10.   { 

  11.     return 0; 

  12.   } 


  13.   cProcesses = cbNeeded / sizeof(DWORD); 

  14.   // 按有效的PID遍歷所有的進(jìn)程 

  15.   for ( i = 0; i < cProcesses; i++ ) 

  16.   { 

  17.     // 打開(kāi)特定PID的進(jìn)程 

  18.     hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | 

  19.         PROCESS_VM_READ, 

  20.         FALSE, aProcesses[i]); 

  21.     // 取得特定PID的進(jìn)程名 

  22.     if ( hProcess ) 

  23.     { 

  24.       if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) ) 

  25.       { 

  26.         GetModuleBaseName( hProcess, hMod, 

  27.             szProcessName, sizeof(szProcessName) ); 

  28.         //將取得的進(jìn)程名與輸入的進(jìn)程名比較,如相同則返回進(jìn)程PID 

  29.         if(!stricmp(szProcessName, InputProcessName)) 

  30.         { 

  31.           CloseHandle( hProcess ); 

  32.           return aProcesses[i]; 

  33.         } 

  34.       } 

  35.     }//end of if ( hProcess ) 

  36.   }//end of for 

  37.   //沒(méi)有找到相應(yīng)的進(jìn)程名,返回0 

  38.   CloseHandle( hProcess ); 

  39.   return 0; 

  40. }




也可以枚舉得到所有進(jìn)程的應(yīng)用程序名,然后和知道應(yīng)用程序名比較判斷。




  1. DWORD GetProcessidFromName(LPCTSTR name)

  2. {

  3.   PROCESSENTRY32 pe;

  4.   DWORD id=0;

  5.   HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

  6.   pe.dwSize=sizeof(PROCESSENTRY32);

  7.   if(!Process32First(hSnapshot,&pe))

  8.     return 0;

  9.   while(1)

  10.   {

  11.     pe.dwSize=sizeof(PROCESSENTRY32);

  12.     if(Process32Next(hSnapshot,&pe)==FALSE)

  13.       break;

  14.     if(strcmp(pe.szExeFile,name)==0)

  15.     {

  16.       id=pe.th42ProcessID;


  17.       break;

  18.     }



  19.   }

  20.   CloseHandle(hSnapshot);

  21.   return id;

  22. }

到此,關(guān)于“QT怎么判斷另外一個(gè)進(jìn)程在運(yùn)行”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

qt
AI