windows程序单实例

    // pszUniqueName需要以Global\\开头,且需保证事件名在整个计算机上唯一,可以使用GUID
    //
    BOOL CheckSingleInstance(LPCTSTR pszUniqueName) {
        HANDLE hMutex = CreateEvent(NULL, TRUE, FALSE, pszUniqueName);
        DWORD dwLstErr = GetLastError();
        BOOL bOneInstanceCheck = TRUE;

        if(hMutex) {
            if(dwLstErr == ERROR_ALREADY_EXISTS) {
                CloseHandle(hMutex);
                bOneInstanceCheck = FALSE;
            }
        }
        else {
            // 注:这一步不能遗漏,否则,不同session(会话)中仍然能存在多个实例。
            if(dwLstErr == ERROR_ACCESS_DENIED)
                bOneInstanceCheck = FALSE;
        }

        return bOneInstanceCheck;
    }
int main() {
    if(CheckSingleInstance(TEXT("Global\\9E27A5A3F6924FFFAE834E230CB27575") == FALSE) {
        printf("已经有一个实例在运行了\n");
        return 1;
    }

    return 0;
}

你可能感兴趣的:(#,Windows核心编程,windows,单实例)