开发鼠标键盘里程计中用到这个知识点,开始尝试了一种方法,未遂。后来仔细一看,原来写的地方不对。
方法一:
//---------------------------------------------------------------------------
#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 编译通过