用windows api實現同一時間只能運行一副本


就一個程式 按一次exe, 會跳出運行 這沒有問題。


但當第一個副本還在運行時,再按次exe,

不會再跳出來一個副本,而是讓焦點回到第一個副本。

好比visual studio 就能開啟多個副本

未裝插件的skype, 已有一副本運行中, 點第二次時, 就會聚焦回第一個.

這老話題了 這邊做些筆記

window api : 假設是用MFC
在程式進入點 InitInstance 中(若是用個console程式開個窗口 就是加在main中), 添加下面的代碼:

              HANDLE hMutex = CreateMutex(NULL, false, WINDOW_NAME);
 
            if (GetLastError() == ERROR_ALREADY_EXISTS)
 
            {
 
                            CloseHandle(hMutex);

 
                           
 
                            HWND    hOldInstance;
 
                            hOldInstance=::FindWindow(NULL,WINDOW_NAME);

 
                            if(NULL != hOldInstance)
 
                            {
 
                                            ShowWindow(hOldInstance,SW_RESTORE|SW_SHOWNORMAL);
 
                                            SetForegroundWindow(hOldInstance);
 
                            }

 
                            return FALSE;
 
            }

然後在窗口實體的OnInitDialog裡 加上
      this->SetWindowText(WINDOW_NAME);

  WINDOW_NAME是個string 當然要定義之:
      #defineWINDOW_NAME                              TEXT("Some Appication")

linux : 若不使用第三方庫,  只知找/proc 下的PID 沒試過


用GTK+

請用 libunique, https://live.gnome.org/LibUnique

裡面說明很清楚還有範例代碼 , 這就不詳述

你可能感兴趣的:(用windows api實現同一時間只能運行一副本)