在最近做的一个项目中需要用到检测进程状态的功能在网上兜了半圈普遍介绍的方法有三种 是利用GetExitCodeProcess(pihProcess&dwExitCode)通过看dwExitCode返回值是不是STILL_ACTIVE依然活动说明存在 waitforsingleobject通过超时来判断具体的实现方法可以去网上查 openprocess通过返回值来判断如果返回值为NULL则表示进程已经打开否则没有打开 上面个方法别人都说行也有人说有局限性就拿openprocess来说吧自己在测试是发现线程关掉了但是返回值还是NULL郁闷啊~~没办法只能用最土的办法来解决这个问题 load系统的进程表看进程id是不是匹配匹配则表示正在运行否则就已经挂了代码如下 #include <Tlhelph> //如果有运行返回进程的true没运行返回false bool ProcessExist(DWORD process_id) { PROCESSENTRY pe; DWORD id = ; HANDLE hSnapshot = CreateToolhelpSnapshot(THCS_SNAPPROCESS) pedwSize = sizeof(PROCESSENTRY) if( !ProcessFirst(hSnapshot&pe) ) { CloseHandle(hSnapshot) return false; } while() { pedwSize = sizeof(PROCESSENTRY) if( ProcessNext(hSnapshot&pe)==FALSE ) { CloseHandle(hSnapshot) return false; } if(process_id == pethProcessID) { CloseHandle(hSnapshot) return true; } } } |