www.gusucode.com > 仿360最新界面的源码程序 > 仿360最新界面的源码程序/仿360新版特性窗口源码/部分源码/360新版特性源码/QPreview/SingleInst.cpp
/************************************************************************ 模快名: 仿360安全卫士界面 功能: 尚未对模块功能进行描述 完成日期: 2010-10-20 作者: 杨伟峰 Yang Weifeng(Email: 11259500@qq.com) 本代码可以自由使用,但因使用本代码造成的后果,本人不承担任何责任 ************************************************************************/ #include "stdafx.h" #include "Singleinst.h" CSingleInst::CSingleInst(LPCTSTR lpszGuid) { m_strGuid = lpszGuid; m_strGuidMapFile = m_strGuid; m_strGuidMapFile.Append(_T("_MapFile")); m_hInstMutex = NULL; m_hMapFile = NULL; } CSingleInst::~CSingleInst(void) { AppEnd(); } BOOL CSingleInst::AppStart() { m_hInstMutex = CreateMutex(NULL, TRUE, m_strGuid); if (::GetLastError() == ERROR_ALREADY_EXISTS || ::GetLastError() == ERROR_ACCESS_DENIED) return FALSE; else return TRUE; } void CSingleInst::AppEnd() { if (NULL != m_hMapFile && INVALID_HANDLE_VALUE != m_hMapFile) { CloseHandle(m_hMapFile); m_hMapFile = NULL; } if (NULL != m_hInstMutex) { ReleaseMutex(m_hInstMutex); CloseHandle(m_hInstMutex); m_hInstMutex = NULL; } } void CSingleInst::InitCompleted(LPVOID pData, UINT uSize) { if (NULL != pData && 0 != uSize) { LPVOID pBuf; if (NULL == m_hMapFile) { m_hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, uSize, m_strGuidMapFile); if (NULL == m_hMapFile || INVALID_HANDLE_VALUE == m_hMapFile) goto end; } pBuf = MapViewOfFile(m_hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, uSize); CopyMemory(pBuf, pData, uSize); UnmapViewOfFile(pBuf); } end: ReleaseMutex(m_hInstMutex); } void CSingleInst::InitCompleted( HWND hMainWnd ) { InitCompleted(&hMainWnd, sizeof(hMainWnd)); } BOOL CSingleInst::WaitForInitCompleted(LPVOID pData, UINT uSize, DWORD dwMillisecond/* = INFINITE*/) { if (NULL == m_hInstMutex) return FALSE; DWORD dwResult; dwResult = WaitForSingleObject(m_hInstMutex, dwMillisecond); if (WAIT_OBJECT_0 != dwResult && WAIT_ABANDONED != dwResult) return FALSE; ReleaseMutex(m_hInstMutex); if (NULL == pData || 0 == uSize) return TRUE; HANDLE hMapFile; LPVOID pBuf; hMapFile = OpenFileMapping(FILE_MAP_READ, FALSE, m_strGuidMapFile); if (NULL == hMapFile || INVALID_HANDLE_VALUE == hMapFile) return FALSE; pBuf = MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, uSize); CopyMemory(pData, pBuf, uSize); UnmapViewOfFile(pBuf); CloseHandle(hMapFile); return TRUE; } BOOL CSingleInst::WaitForInitCompleted( HWND &hMainWnd, DWORD dwMillisecond/* = INFINITE*/) { return WaitForInitCompleted(&hMainWnd, sizeof(hMainWnd), dwMillisecond); }