摘自windows Mobile public下源码
Processinfo.hpp
#if !defined(_PROCESS_INFO_H)
#define _PROCESS_INFO_H
#include "StdAfx.h"
BOOL IsProcessRunning( TCHAR* ProcessName);
TCHAR* GetProcessName(TCHAR* svExeFile);
#endif
Processinfo.cpp
#include "ProcessInfo.hpp"
//该函数去除路径信息(如果存在的话)只取名称
TCHAR* GetProcessName(TCHAR* svExeFile)
{
TCHAR* pchTemp = svExeFile, *pchRetVal;
while(pchRetVal = wcschr(pchTemp, '\\'))
pchTemp = pchRetVal+1;
TCHAR* ExeName = new TCHAR[wcslen(pchTemp)+1];
if (!ExeName)
return NULL;
wcscpy(ExeName, pchTemp);
return ExeName;
}
//检测进程是否在运行
BOOL IsProcessRunning(TCHAR* ProcessName)
{
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hSnapShot == (HANDLE)-1)
{
DEBUGMSG (1,(L"Wbttscmn--IsProcessRunning -- Failed in CreateSnapShot and Error: %d\n",GetLastError()));
return FALSE;
}
PROCESSENTRY32 lppe;
memset(&lppe,0,sizeof(PROCESSENTRY32));
lppe.dwSize = sizeof(PROCESSENTRY32);
if(Process32First(hSnapShot, &lppe))
{
while(TRUE)
{
TCHAR* ExeFile = GetProcessName(lppe.szExeFile);
if(!wcsicmp(ExeFile, ProcessName))
{
//这里看看能不能获得进程句柄,而不单单是比较进程名称。
HANDLE CtlpnlProcess = OpenProcess(PROCESS_TERMINATE, FALSE, lppe.th32ProcessID);
BOOL bRet = (CtlpnlProcess) ? TRUE : FALSE;
CloseHandle(CtlpnlProcess);
return bRet;
}
if(ExeFile)
delete ExeFile;
if(!Process32Next(hSnapShot, &lppe))
break;
}
}
CloseToolhelp32Snapshot (hSnapShot);
return FALSE;
}