删除文章

确定要删除这篇文章吗?

取消
确定

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

     阅读(950)  2017-02-02 03: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
文章数
334
今日访问
1107
今日IP数
451
最近评论

liangzi: 不错 谢谢分享
tujiaw: registerThreadInactive:如果当前没有激活的线程,就去激活线程,让等待的线程去执行任务。
hgzzx: 佩服佩服。 请教:registerThreadInactive的作用是什么?
xuehaoyun: 很不错,来围观一下
tujiaw: 抱歉csdn code服务关闭了,这个代码我也找不到了
于淞: 你好,这个文章的源码能分享一下吗,songsong9181@163.com,谢谢了 上面的写错了
回到顶部