VC++ 只运行一个程序实例
来源:互联网 发布:mac u盘复制文件 编辑:程序博客网 时间:2024/05/17 22:37
源代码如下:
#pragma once
#define DECLARE_SinglePrj SinglePrj* SinglePrj::m_pSinglePrj = NULL;
#define SinglePrj_InitInstance(szPropName) SinglePrj *pSinglePrj = SinglePrj::GetInstance();\
if (NULL != pSinglePrj)\
if(!pSinglePrj->InitInstance(szPropName)) return FALSE;
#define SinglePrj_OnInitDialog SinglePrj *pSinglePrj = SinglePrj::GetInstance(); \
if (NULL != pSinglePrj) pSinglePrj->OnInitDialog(m_hWnd);
class SinglePrj
{
public:
static SinglePrj *m_pSinglePrj;
static SinglePrj *GetInstance()
{
if (NULL == m_pSinglePrj) m_pSinglePrj = new SinglePrj();
return m_pSinglePrj;
}
bool InitInstance(CString szPropName)
{
m_szPropName = szPropName;
m_hValue = (HANDLE)1;
HWND oldHWnd = NULL;
EnumWindows(EnumWndProc,(LPARAM)&oldHWnd);
if (NULL == oldHWnd) return true;
::ShowWindow(oldHWnd,SW_SHOW);
::SetForegroundWindow(oldHWnd);
return false;
}
void OnInitDialog(HWND hwnd)
{
SetProp(hwnd,m_szPropName,m_hValue);
}
private:
static BOOL CALLBACK EnumWndProc(HWND hwnd,LPARAM lParam)
{
SinglePrj * pSinglePrj = GetInstance();
if (NULL == pSinglePrj) return false;
HANDLE h = GetProp(hwnd,pSinglePrj->m_szPropName);
if( h == pSinglePrj->m_hValue)
{
*(HWND*)lParam = hwnd;
return false;
}
return true;
}
private:
SinglePrj(){}
CString m_szPropName;
HANDLE m_hValue;
};
使用方法:
以程序名为 _T("Test") 为例
1.任意cpp中声明宏
DECLARE_SinglePrj
2.程序初始化函数中声明宏:
SinglePrj_InitInstance( _T("Test") )
2.窗体初始化函数中声明宏:
SinglePrj_OnInitDialog
- VC 程序只运行一个实例
- VC++实现程序只运行一个实例
- vc++ 程序只运行一个实例
- VC 实现程序只运行一个实例
- 【VC】 实现程序只运行一个实例
- VC++实现程序只运行一个实例 .
- VC++ 只运行一个程序实例
- VC++中用内存映射文件--只运行一个程序实例
- 如何让程序只运行一个实例(VC)
- 如何让程序只运行一个实例(VC)
- VC让程序只运行一个实例的方法
- VC++实现程序只运行一个实例 (转)
- vc只允许程序有一个实例运行
- VC++实现程序只运行一个实例 最简单办法
- 只运行一个程序实例
- 只运行一个实例程序
- 程序只运行一个实例
- 只运行一个程序实例
- NEUQ-OJ:1177 亲和数
- 计算机组成原理复习总结
- Android 积累一些RxJava2.0有关的知识
- 高效查表判断胡牌算法的lua版本
- DokuWiki表格项垂直居中的方法
- VC++ 只运行一个程序实例
- centos 7 搭建mysql数据库
- reactjs 编写一个简单的图片轮播图
- R语言绘制ROC曲线如何画在一个图中
- MySQL中单句实现无限层次父子关系查询
- java消息队列ActiveMQ之Comsumer
- Eclipse | Eclipse安装中文版本教程
- 利用基站定位手机
- BZOJ2286 [Sdoi2011]消耗战 【虚树 + 树形Dp】