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

// 单例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);
    }
}

原文链接: https://www.cnblogs.com/dailycode/p/12896622.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

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

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/348647

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午5:10
下一篇 2023年3月2日 上午5:10

相关推荐