admin管理员组文章数量:1318257
直接贴代码吧,在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,后续操作看各位的了。
版权声明:本文标题:Windows下C++判断当前程序是否已存在活动实例 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1738021587a2050619.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论