2009年1月19日 星期一

BCB-防止程式重複執行

要防止自己的程式重複執行,使用的方法有好幾種,有些方法甚至要去修改*.bpr檔(C++ Builder 專案檔),但建議不要任意修改 C++ Builder 自動維護的專案檔;使用下列方法只要將下列程式碼原封不動的抄到FormCreate() 事件中即可,不但不會讓相同的程式同時存在第二個實體,而且在執行時發現第一個實體已存在而且是最小化時,還會將其彈出展開於桌面上....

//-------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Application->Title=Form1->Caption;
HANDLE PrevInstHandle;
HANDLE Mutex = OpenMutex(SYNCHRONIZE,false,Application->Title.c_str());
if (Mutex != null)
{
String AppTitle=Application->Title;
SetWindowText(Application->Handle,null);
PrevInstHandle = FindWindow("TApplication", AppTitle.c_str());
if (PrevInstHandle != 0)
{
if (IsIconic(PrevInstHandle))
ShowWindow(PrevInstHandle, SW_RESTORE);
else
BringWindowToTop(PrevInstHandle);
SetForegroundWindow(PrevInstHandle);
}
Application->ShowMainForm = false;
Application->Terminate();
}
else CreateMutex(null, false, Application->Title.c_str());
}

沒有留言:

張貼留言