※ 引述《tropical72 (藍影)》之銘言:
: 這問題簡單的說:防程式多開。
: ※ 引述《DrStein (啤酒肚)》之銘言:
: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: : windows linux都要 XD
謝 windows 我解決了 提供點快速的作法
假設用MFC (若是用個console程式開個窗口 就是加在main中)
在程式進入點 InitInstance 中 添加下面的代碼:
HANDLE hMutex = CreateMutex(NULL, false, WINDOW_NAME);
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
CloseHandle(hMutex);
/* focus on the first */
HWND hOldInstance;
hOldInstance=::FindWindow(NULL,WINDOW_NAME);
if(NULL != hOldInstance)
{
ShowWindow(hOldInstance,SW_RESTORE|SW_SHOWNORMAL);
SetForegroundWindow(hOldInstance);
}/*if NULL != hOldInstance*/
return FALSE;
}/*if ERROR_ALREADY_EXISTS*/
然後在窗口實體的OnInitDialog裡 加上
this->SetWindowText(WINDOW_NAME);
WINDOW_NAME是個string 當然要定義之:
#define WINDOW_NAME TEXT("Some Appication")
這樣程式就不可出多個實例。
當使用者意圖點超過一次時,會自動聚焦於第一個。
linux部份就還在研究。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.120.158.204