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 + -
显示快捷键?