mfc程序只运行一个实例

来源:互联网 发布:中国软件上海分公司 编辑:程序博客网 时间:2024/05/16 07:59

有时候我们希望程序只被启动运行一个实例,步骤如下:

1.新建一个dialog(本例test.exe):

在test.cpp的InitInstance()方法中,添加一个判断:

// CtestApp 初始化BOOL CtestApp::InitInstance(){HANDLE hSem = CreateSemaphore(NULL, 1,1, m_pszExeName);if(GetLastError() == ERROR_ALREADY_EXISTS) //程序已启动{CloseHandle(hSem);return FALSE;}// 如果一个运行在 Windows XP 上的应用程序清单指定要// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,//则需要 InitCommonControlsEx()。否则,将无法创建窗口。INITCOMMONCONTROLSEX InitCtrls;InitCtrls.dwSize = sizeof(InitCtrls);// 将它设置为包括所有要在应用程序中使用的// 公共控件类。InitCtrls.dwICC = ICC_WIN95_CLASSES;InitCommonControlsEx(&InitCtrls);CWinApp::InitInstance();AfxEnableControlContainer();// 标准初始化// 如果未使用这些功能并希望减小// 最终可执行文件的大小,则应移除下列// 不需要的特定初始化例程// 更改用于存储设置的注册表项// TODO: 应适当修改该字符串,// 例如修改为公司或组织名SetRegistryKey(_T("应用程序向导生成的本地应用程序"));CtestDlg dlg;m_pMainWnd = &dlg;INT_PTR nResponse = dlg.DoModal();if (nResponse == IDOK){// TODO: 在此放置处理何时用//  “确定”来关闭对话框的代码}else if (nResponse == IDCANCEL){// TODO: 在此放置处理何时用//  “取消”来关闭对话框的代码}// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,//  而不是启动应用程序的消息泵。return FALSE;}
编译运行,该test.exe只可以运行一个实例。

0 0
原创粉丝点击