温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

QT怎么判断另外一个进程在运行

发布时间:2021-12-15 09:42:18 来源:亿速云 阅读:958 作者:iii 栏目:开发技术

这篇文章主要介绍“QT怎么判断另外一个进程在运行”,在日常操作中,相信很多人在QT怎么判断另外一个进程在运行问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”QT怎么判断另外一个进程在运行”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

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

到此,关于“QT怎么判断另外一个进程在运行”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

qt
AI