直接贴代码吧,在main函数中调用即可:
头文件必不可少:
#include <windows.h>
#include <tlhelp32.h>
实现函数:
bool isProcessExist()
{
HANDLE hProcessSnap;
PROCESSENTRY32 pe32;
DWORD dwPid = 0;
int nProcCount = 0;
// 截取系统中运行进程的快照
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
{
return false;
}
pe32.dwSize = sizeof(PROCESSENTRY32);
if (!Process32First(hProcessSnap, &pe32))
{
CloseHandle(hProcessSnap); // clean the snapshot object
return false;
}
// 获取自己程序的进程名,用于比对
TCHAR szFileFullPath[_MAX_PATH] = {0};
::GetModuleFileName(NULL, static_cast<LPTSTR>(szFileFullPath), _MAX_PATH);
int iLength = 0;
char szFullPath[_MAX_PATH] = {0};
//获取字节长度
iLength = WideCharToMultiByte(CP_ACP, 0, szFileFullPath, -1, NULL, 0, NULL, NULL);
//将tchar值赋给_char
WideCharToMultiByte(CP_ACP, 0, szFileFullPath, -1, szFullPath, iLength, NULL, NULL);
std::string strProcPath = szFullPath;
// 得到自身进程名
std::string szProcName = strProcPath.substr(strProcPath.find_last_of("\\") + 1);
bool bRet = false;
char szPeProcName[_MAX_PATH] = {0};
do
{
// 遍历进程快照,比对是否有同名进程
memset(szPeProcName, 0, _MAX_PATH);
// wchar 转 char*
sprintf(szPeProcName, "%ws", pe32.szExeFile );
if (0 == strcmp(szProcName.c_str(), szPeProcName))
{
dwPid = pe32.th32ProcessID;
++nProcCount;
if (nProcCount > 1)
{
// 不止有一个进程
bRet = true;
break;
}
}
} while (Process32Next(hProcessSnap, &pe32));
CloseHandle(hProcessSnap);
return bRet;
}
当有且仅有一个同名进程时返回false,大于一个时返回true,后续操作看各位的了。
发布者:admin,转转请注明出处:http://www.yc00.com/web/1738021586a4012551.html
评论列表(0条)