Windows下C++判断当前程序是否已存在活动实例
来源:互联网 发布:智慧树网络课平台登录 编辑:程序博客网 时间:2024/06/06 19:29
直接贴代码吧,在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,后续操作看各位的了。
0 0
- Windows下C++判断当前程序是否已存在活动实例
- Linux下用C语言判断程序是否已运行
- 判断当前窗体是否为Windows活动窗体?
- C VC++ 下判断目录是否存在
- 判断文件是否已存在
- C#判断当前启动程序进程是否存在
- C#判断当前启动程序进程是否存在
- 判断当前网络是否存在
- C语言判断当前某一个进程是否存在
- 判断文件、目录是否存在:C、C++、Windows API、 boost
- 判断文件、目录是否存在:C、C++、Windows API、 boost
- 判断该程序是否已有实例运行
- windows 判断文件是否存在
- 判断windows进程是否存在
- android判断程序是否存在
- sql 判断数据库是否已存在
- 判断已有节点是否存在 XML
- SQL 判断表是否已存在 【转】
- 容器,文字的水平和垂直居中的方法
- MPTCP高级配置
- DRUID连接池的实用 配置详解
- 网易2017内推笔试编:藏宝图
- ios 修改工程名
- Windows下C++判断当前程序是否已存在活动实例
- jQuery序列化表单为JSON对象
- 数组九大方法
- C/C++学习笔记
- mysql如何更新一个表中的某个字段值等于另一个表的某个字段值
- java集合set,list、map
- c#获取流水单号
- git 常见的命令以及开发时注意的问题
- 使用cxf开发RESTful WebService