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.   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.   // 计算目前有多少进程, aProcesses[]用来存放有效的进程PIDs 

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

  10.   { 

  11.     return 0; 

  12.   } 


  13.   cProcesses = cbNeeded / sizeof(DWORD); 

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

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

  16.   { 

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

  18.     hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | 

  19.         PROCESS_VM_READ, 

  20.         FALSE, aProcesses[i]); 

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

  22.     if ( hProcess ) 

  23.     { 

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

  25.       { 

  26.         GetModuleBaseName( hProcess, hMod, 

  27.             szProcessName, sizeof(szProcessName) ); 

  28.         //将取得的进程名与输入的进程名比较,如相同则返回进程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.   //没有找到相应的进程名,返回0 

  38.   CloseHandle( hProcess ); 

  39.   return 0; 

  40. }




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




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

相关内容

热门资讯

伊朗对美国位于海湾地区的军事目... 总台记者获悉,当地时间7月13日凌晨,来自伊朗境内不同地区发射的无人机和导弹对美国在海湾地区内的军事...
看完《功夫女足》,“周星驰倒欠... 谈到周星驰的新片《功夫女足》,人们很难不把它与2001年的电影《少林足球》做对比。但除了“不被看好的...
墨西哥多车相撞致9死10伤,画... 【环球网报道】据路透社等外媒报道,墨西哥哈利斯科州民防部门当地时间12日通报称, 该州一条高速公路上...
一边泼大雨一边猛升温,台风“巴... 今明两天,随着“巴威”继续北上,江南北部到东北多地将陆续迎来强降雨天气;华东一带台风影响结束,高温迅...
中央气象台三预警齐发,“巴威”... 中央气象台7月13日6时继续发布暴雨橙色预警、台风蓝色预警、强对流天气蓝色预警。暴雨橙色预警预计,7...
2026广州小程序开发公司横向... 2026年,广州小程序开发市场已进入成熟洗牌期,服务商群体形成技术自研派、垂直行业派、整合服务派三大...
AI时代,别再瞎焦虑了 有人工智能教母之称的李飞飞说得很直白:AI再强,也只是工具,代替不了完整的人。未来真正值钱的,是人的...
帅康油烟机故障 帅康是一家知名的厨房电器品牌,其油烟机受到了广大消费者的喜爱。但是,即使是最优质的电器产品也难免出现...
欧帝吸油烟机怎样拆卸清洗 首先,切断油烟机的电源开关,并使用工具拆掉上面的储油盒、过滤网、风扇等等;再用油烟机专用清洗液,把取...
华帝油烟机升降故障 华帝油烟机是近年来市场上比较受欢迎的一款产品,在家庭的厨房中发挥着重要的作用。但是,使用过程中也会出...