VC++.单例2事件(进程名称)

2021-01-21 05:14

阅读:569

标签:for   hand   ssi   目的   att   har   pre   rev   ntp   

// 单例2:事件。
/************************************************************************/
/*
HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES lpEventAttributes,// 安全属性,如果为空的话表示句柄不能被子进程继承,大部分情况设置为NULL即可
BOOL bManualReset,// 复位方式,TRUE表示手动SetEvent复位,FALSE表示线程结束自动复位,一般FALSE就可以
BOOL bInitialState,// 初始状态,初始为有信号还是无信号状态
LPCTSTR lpName // 对象名称,是否命名,如果设置成NULL的话就达不到进程单例的目的了
);
*/
/************************************************************************/
CString strCurProcessName;
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0, GetCurrentProcessId());
if (hProcess)
{
	TCHAR wsz[MAX_PATH] = { 0 };
	GetModuleFileNameEx(hProcess, 0, wsz, (MAX_PATH - 1) * sizeof(TCHAR));
	strCurProcessName = wsz;
	CloseHandle(hProcess);
}
if (strCurProcessName.GetLength())
{
	strCurProcessName.Replace(_T("/"), _T("\\"));
	strCurProcessName = strCurProcessName.Mid(1 + strCurProcessName.ReverseFind(_T(‘\\‘)));
	HANDLE hSingleton = ::CreateEvent(0, 0, 1, strCurProcessName);
	if (GetLastError() == ERROR_ALREADY_EXISTS)
	{
		TerminateProcess(GetCurrentProcess(), 0);
	}
}

VC++.单例2事件(进程名称)

标签:for   hand   ssi   目的   att   har   pre   rev   ntp   

原文地址:https://www.cnblogs.com/dailycode/p/12896622.html


评论


亲,登录后才可以留言!