设为首页 加入收藏

TOP

应用程序如何实现只运行一个实例
2012-11-01 11:24:45 来源: 作者: 【 】 浏览:346
Tags:应用程序 如何 实现 运行 一个 实例

开发鼠标键盘里程计中用到这个知识点,开始尝试了一种方法,未遂。后来仔细一看,原来写的地方不对。

方法一:

//---------------------------------------------------------------------------

#include
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("Unit1.cpp", Form1);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
        try
        {
                 Application->Initialize();
                HANDLE   hnd   =   CreateMutex(NULL,TRUE, "No   Previous   Instance! ");
                if   (NULL   ==   hnd)
                {
                                        MessageBox(NULL, "创建Mutex失败! ", "NoPrev ",MB_OK|MB_SYSTEMMODAL);
                                        return   0;
                }
               if   (GetLastError()==ERROR_ALREADY_EXISTS)
               {
               ::MessageBox(NULL, "已经运行了一个实例! ",Application-> Title.c_str(),MB_OK|MB_SYSTEMMODAL);
                ReleaseMutex(hnd);
               return   0;
                }

 


                 Application->CreateForm(__classid(TForm1), &Form1);
                 Application->Run();
        }
        catch (Exception &exception)
        {
                 Application->ShowException(&exception);
        }
        catch (...)
        {
                 try
                 {
                         throw Exception("");
                 }
                 catch (Exception &exception)
                 {
                         Application->ShowException(&exception);
                 }
        }
        return 0;
}


方法二:
//---------------------------------------------------------------------------

#include
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("Unit2.cpp", Form1);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{

const   char   *Atom   =   "SingleApp";

        try
        {
 if   (GlobalFindAtom(Atom)   !=   0)//在系统原子表中找原子
                                  {
                                        ::MessageBox(NULL, "已经运行了一个实例! ",Application-> Title.c_str(),MB_OK|MB_SYSTEMMODAL);
                                        return   0;
                                  }
                                  GlobalAddAtom(Atom);//增加原子


                 Application->Initialize();
                 Application->CreateForm(__classid(TForm1), &Form1);
                 Application->Run();
        }
        catch (Exception &exception)
        {
                 Application->ShowException(&exception);
        }
        catch (...)
        {
                 try
                 {
                         throw Exception("");
                 }
                 catch (Exception &exception)
                 {
                         Application->ShowException(&exception);
                 }
        }
        return 0;
}


以上代码在Winxp bcb6.0 编译通过


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇实例解析BCB中利用注册表实现开机.. 下一篇BCB软件发布的问题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: