让程序只有一个应用程序实例在运行

         阅读(526)  2017-02-02 11:16:07

当一个应用程序正在运行的时候我们不希望双击这个应用程序的时候又开启一个新的运行实例, 而仅仅只需要激活先前的实例即可。下面介绍三种简单的方法, 都是在程序开始的时候加入代码:

第一种方法:

	HWND hOldWnd = NULL;
/// define OLD_WND_NAME "先前窗口实例的名字"
	hOldWnd = ::FindWindowEx(NULL, NULL, NULL, OLD_WND_NAME); 
	if (hOldWnd)
	{
		::ShowWindow(hOldWnd, SW_RESTORE);
		::SetForegroundWindow(hOldWnd);
		return 0;
	}

第二种方法(互斥对象):

HANDLE hMutex;
hMutex = CreateMutex(NULL, TRUE, L"any name");
if (hMutex)
{
    if (ERROR_ALREADY_EXISTS == GetLastError())
    {
        // 直接返回
        return 0;
    }
}

第三种方法(事件对象):

HANDLE hEvent;
hEvent= CreateEvent(NULL, FALSE, FALSE, L"any name");
if (hEvent)
{
    if (ERROR_ALREADY_EXISTS == GetLastError())
    {
        // 直接返回
        return 0;
    }
}

(迁移2011-05-28)

文章评论

Keep it simple,stupid
文章数
284
总访问量
263333
今日访问
246
最近评论

ningto : 请到next.ningto.com里发表评论。
tujiaw : 抱歉csdn code服务关闭了,这个代码我也找不到了
于淞 : 你好,这个文章的源码能分享一下吗,songsong9181@163.com,谢谢了 上面的写错了
于淞 : 你好,这个文章的源码能分享一下吗,838106303@163.com,谢谢了 上面的链接不能用了
tujiaw : 多谢多谢
essaypinglun college-paper.org : 很好的博客,赞赞
Folly : 这个实现有点奇怪,Qt为什么没有统一的比对方法。
过多s : alert("hello, world!")
tujiaw : 还不错哦
回到顶部