QT怎么判断另外一个进程在运行
admin
2023-08-03 20:00:09
0次

Qt库似乎没有完整的跨平台解决方案,你可能需要自己分平台判断。

windows可以使用上述提到的方法使用openprocess获取相关信息。终止很简单:

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

其他平台需要想办法找到进程的pid(例如调用系统的ps命令进行过滤查找),

linux打开/proc/pid/cmdline查看进程状态。

sun系统打开/proc/pid/psinfo查看进程状态。

---------------------------WIN平台------------------------------------------------

附代码:

const   char   DESTPROC[19]   =   "cmd.exe";    
DWORD   pid   =   ProcessToPID(DESTPROC);    
返回为0就是没有  


  1. DWORD ProcessToPID(const char *InputProcessName) 

  2. { 

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

  4.   unsigned int i; 

  5.   HANDLE hProcess = NULL; 

  6.   HMODULE hMod = NULL; 

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


  8.   AddPrivilege(SE_DEBUG_NAME); 


  9.   // 计算目前有多少进程, aProcesses[]用来存放有效的进程PIDs 

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

  11.   { 

  12.     return 0; 

  13.   } 


  14.   cProcesses = cbNeeded / sizeof(DWORD); 

  15.   // 按有效的PID遍历所有的进程 

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

  17.   { 

  18.     // 打开特定PID的进程 

  19.     hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | 

  20.         PROCESS_VM_READ, 

  21.         FALSE, aProcesses[i]); 

  22.     // 取得特定PID的进程名 

  23.     if ( hProcess ) 

  24.     { 

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

  26.       { 

  27.         GetModuleBaseName( hProcess, hMod, 

  28.             szProcessName, sizeof(szProcessName) ); 

  29.         //将取得的进程名与输入的进程名比较,如相同则返回进程PID 

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

  31.         { 

  32.           CloseHandle( hProcess ); 

  33.           return aProcesses[i]; 

  34.         } 

  35.       } 

  36.     }//end of if ( hProcess ) 

  37.   }//end of for 

  38.   //没有找到相应的进程名,返回0 

  39.   CloseHandle( hProcess ); 

  40.   return 0; 

  41. }




也可以枚举得到所有进程的应用程序名,然后和知道应用程序名比较判断。




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

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...