包含头文件:
#include <windows.h> //不一定需要
#include "psapi.h" //不一定需要
#include"stdio.h" //不一定需要
#include <tlhelp32.h>//一定需要
函数:
/*-------------------------------------------------------------------------------------------
功能:判断某进程是否正在运行
输入值:strProccess(进程名,例:SpiderEspExplain.exe)
返回值:BRunning(TRUE:正在运行;FALSE:未运行)
-------------------------------------------------------------------------------------------------*/
BOOL CMFCInvokingOcxDlg::IsProccessRunning(CString strProccess) {
BOOL BRunning = FALSE;
PROCESSENTRY32 processEntry32;
HANDLE toolHelp32Snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (((int)toolHelp32Snapshot) != -1)
{
processEntry32.dwSize = sizeof(processEntry32);
if (Process32First(toolHelp32Snapshot, &processEntry32))
{
do
{
CString str(L"");
str = processEntry32.szExeFile;
if (str == strProccess)
{
BRunning = TRUE;
AfxMessageBox(L"程序正在运行");
break;
}
}
while (Process32Next(toolHelp32Snapshot, &processEntry32));
}
CloseHandle(toolHelp32Snapshot);
}
return BRunning;
}
/*-------------------------------------------------------------------------------------------
功能:关闭外部进程
输入值:strProccess(进程名,例:SpiderEspExplain.exe)
返回值:BKilling(TRUE:关闭成功;FALSE:关闭失败)
-------------------------------------------------------------------------------------------------*/
BOOL CMFCInvokingOcxDlg::KillProcess(CString sExeName)
{
BOOL BKilling = FALSE;
HANDLE hSnapShot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapShot == 0) {
AfxMessageBox(L"获取进程信息失败!");
return FALSE;
}
PROCESSENTRY32 thePE;
thePE.dwSize = sizeof(PROCESSENTRY32);
//遍历正在运行的第一个系统进程
bool Status = Process32First(hSnapShot, &thePE);
bool bHaveFlag = false;
DWORD ProcessID = 0;
while (Status)
{
//遍历正在运行的下一个系统进程
Status = Process32Next(hSnapShot, &thePE);
//找到相应的进程 **.exe
CString sFindName = thePE.szExeFile;
//CString sTemp = sExeName.Mid(0, sFindName.GetLength());
if (sFindName == sExeName)
{
bHaveFlag = true;
ProcessID = thePE.th32ProcessID;
//结束指定的进程 ProcessID
if (!TerminateProcess(OpenProcess(PROCESS_TERMINATE || PROCESS_QUERY_INFORMATION, false, ProcessID), 0))
{
AfxMessageBox(L"无法终止指定的进程!");
break;
}
else
{
BKilling = TRUE;
AfxMessageBox(L"进程结束!");
break;
}
}
}
CloseHandle(hSnapShot);
return BKilling;
}