void __fastcall TformMain::CheckInstance(void)
{
Application->Title = Caption;
HANDLE PrevInstHandle;
Mutex = OpenMutex(SYNCHRONIZE, false, Application->Title.c_str());

/* 檢查是否有重複執行 */
if (Mutex != NULL)
{
/*
* 若有重複,把之前的程式帶到前景,
* 再關閉本身
*/
String AppTitle = Application->Title;
Application->ShowMainForm = false;
SetWindowText(Application->Handle, NULL);
PrevInstHandle = FindWindow("TApplication", AppTitle.c_str());
if (IsIconic(PrevInstHandle))
ShowWindow(PrevInstHandle, SW_RESTORE);
else
{
BringWindowToTop(PrevInstHandle);
SetForegroundWindow(PrevInstHandle);
}
Application->Terminate();
}
else
Mutex = CreateMutex(NULL, false, Application->Title.c_str());
}
//---------------------------------------------------------------------------
void __fastcall TformMain::FormClose(TObject *Sender, TCloseAction &Action)
{
ReleaseMutex(Mutex); // 記得在結束程式前,要釋放為了避免重複執行而產生的 Mutex
}


創作者介紹
創作者 Nelson 的頭像
Nelson

Nelson 的小世界

Nelson 發表在 痞客邦 留言(1) 人氣()


留言列表 (1)

發表留言
  • kent
  • 在.h檔還要加上宣告
    HANDLE Mutex;//禁止程式重複執行的參數

    感謝你的BCB 程式開發筆記