千家信息网

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

发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章主要介绍"QT怎么判断另外一个进程在运行",在日常操作中,相信很多人在QT怎么判断另外一个进程在运行问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"QT怎么判断另
千家信息网最后更新 2025年01月18日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怎么判断另外一个进程在运行"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0