⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 singleinstance.cpp

📁 涉及到SkinMagicLiB等多种界面开发库的应用
💻 CPP
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -