摘自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"
//該函數去除路徑信息(如果存在的話(huà))只取名稱(chēng)
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;
}
//檢測進(jìn)程是否在運行
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))
{
//這里看看能不能獲得進(jìn)程句柄,而不單單是比較進(jìn)程名稱(chēng)。
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;
}