singleinstance.cpp

来自「涉及到SkinMagicLiB等多种界面开发库的应用」· C++ 代码 · 共 96 行

CPP
96
字号
#include "stdafx.h"
#include "SingleInstance.h"

CSingleInstance::CSingleInstance()

{

	// Set our default values

	m_hMutex = NULL;

}



CSingleInstance::~CSingleInstance()

{

	if ( m_hMutex != NULL ) {

		ReleaseMutex( m_hMutex );

	}

}



BOOL CSingleInstance::Create(LPCSTR pszClassName)

{

	// Add the word 'Class' to the end

	m_strClassName = pszClassName;



	// Create the mutex

	m_hMutex = CreateMutex( NULL, FALSE, m_strClassName );
	//m_hMutex = CreateSemaphore(NULL, 1, 1, m_strClassName);
	// Check for errors

	if ( GetLastError() == ERROR_ALREADY_EXISTS ) {

		m_hMutex = NULL;
		CString s;
		// 寻找先前实例的主窗口 
		HWND hWndPrevious = ::GetWindow(::GetDesktopWindow(),GW_CHILD); 
		while (::IsWindow(hWndPrevious)) 
		{ 
			// 检查窗口是否有预设的标记? 
			// 有,则是我们寻找的主窗 
			::GetWindowText(hWndPrevious,(char*)(LPCTSTR)s ,255);
			if (!s.Find(m_strClassName)) 
			{ 
				ShowWindow(hWndPrevious,SW_SHOW);

				ShowWindow( hWndPrevious, SW_RESTORE );

				BringWindowToTop( hWndPrevious );

				SetForegroundWindow( hWndPrevious );
					return FALSE; 
			} 
			// 继续寻找下一个窗口 
			hWndPrevious = ::GetWindow(hWndPrevious,GW_HWNDNEXT);
		} 
		// 前一实例已存在,但找不到其主窗 
		// 可能出错了 
		// 退出本实例 

		return FALSE;

	}

	// Return success

	return TRUE;

}



CString CSingleInstance::GetClassName( void ) const

{

	return m_strClassName;

}


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?