C++ (MFC) 单程序运行(防止多开程序)
2024-01-09 18:42:31
C++ (MFC) 单程序运行(防止多开程序)
项目文件名:MFCAppTest
在 C*****App.cpp 文件中
CMFCAppTestApp::InitInstance 函数中
添加以下代码
//避免程序的多开 xxxx为信号量的名字 可随意
CreateMutex(NULL, TRUE, TEXT("MFCAppTest"));
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
//windowname为你的主窗体的标题,当然你也可以通过进程来找到主窗体。
CWnd* cwnd = CWnd::FindWindow(NULL, TEXT("MFCAppTest"));
if (cwnd)//显示原先的主界面
{
cwnd->ShowWindow(SW_SHOWNORMAL);
cwnd->SetForegroundWindow();
}
return FALSE;
}
完整代码
// MFCAppTest.cpp : Defines the class behaviors for the application.
//
#include "stdafx.h"
#include "MFCAppTest.h"
#include "MFCAppTestDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CMFCAppTestApp
BEGIN_MESSAGE_MAP(CMFCAppTestApp, CWinApp)
ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()
// CMFCAppTestApp construction
CMFCAppTestApp::CMFCAppTestApp()
{
// support Restart Manager
m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}
// The one and only CMFCAppTestApp object
CMFCAppTestApp theApp;
// CMFCAppTestApp initialization
BOOL CMFCAppTestApp::InitInstance()
{
//避免程序的多开 xxxx为信号量的名字 可随意
CreateMutex(NULL, TRUE, TEXT("MFCAppTest"));
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
//windowname为你的主窗体的标题,当然你也可以通过进程来找到主窗体。
CWnd* cwnd = CWnd::FindWindow(NULL, TEXT("MFCAppTest"));
if (cwnd)//显示原先的主界面
{
cwnd->ShowWindow(SW_SHOWNORMAL);
cwnd->SetForegroundWindow();
}
return FALSE;
}
// InitCommonControlsEx() is required on Windows XP if an application
// manifest specifies use of ComCtl32.dll version 6 or later to enable
// visual styles. Otherwise, any window creation will fail.
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
// Set this to include all the common control classes you want to use
// in your application.
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);
CWinApp::InitInstance();
AfxEnableControlContainer();
// Create the shell manager, in case the dialog contains
// any shell tree view or shell list view controls.
CShellManager *pShellManager = new CShellManager;
// Activate "Windows Native" visual manager for enabling themes in MFC controls
CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need
// Change the registry key under which our settings are stored
// TODO: You should modify this string to be something appropriate
// such as the name of your company or organization
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
CMFCAppTestDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
else if (nResponse == -1)
{
TRACE(traceAppMsg, 0, "Warning: dialog creation failed, so application is terminating unexpectedly.\n");
TRACE(traceAppMsg, 0, "Warning: if you are using MFC controls on the dialog, you cannot #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS.\n");
}
// Delete the shell manager created above.
if (pShellManager != NULL)
{
delete pShellManager;
}
#ifndef _AFXDLL
ControlBarCleanUp();
#endif
// Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
return FALSE;
}
文章来源:https://blog.csdn.net/weixin_45875105/article/details/135486885
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!