QT怎么判断另外一个进程在运行-创新互联

这篇文章主要介绍“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. {


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

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

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前标题:QT怎么判断另外一个进程在运行-创新互联
本文来源:http://scyanting.com/article/csjhph.html