📄 singleinstance.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 + -