2015年3月11日 星期三

[C#] 如何避免程式被開啓二次

如果程式已經在執行了,使用者又按了一次執行檔,
我們希望能直接跳出已在執行的程式即可,而非開了二個程式,
此時,我們只要在program.cs裡先做檢查就行了
static void Main()
{           
    if (frmMain.AlreadyRunning())
    {
      return;
    }

    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new frmMain());
}
其中,AlreadyRunning()是宣告frmMain.cs裡
public static bool AlreadyRunning()
        {
            /*
            const int SW_HIDE = 0;
            const int SW_SHOWNORMAL = 1;
            const int SW_SHOWMINIMIZED = 2;
            const int SW_SHOWMAXIMIZED = 3;
            const int SW_SHOWNOACTIVATE = 4;
            const int SW_RESTORE = 9;
            const int SW_SHOWDEFAULT = 10;
            */
            const int swRestore = 9;

            var me = Process.GetCurrentProcess();
            var arrProcesses = Process.GetProcessesByName(me.ProcessName);

            if (arrProcesses.Length > 1)
            {
                for (var i = 0; i < arrProcesses.Length; i++)
                {
                    if (arrProcesses[i].Id != me.Id)
                    {
                        // get the window handle
                        IntPtr hWnd = arrProcesses[i].MainWindowHandle;

                        // if iconic, we need to restore the window
                        //if (IsIconic(hWnd))
                        {
                            MessageBox.Show("Already running", "", MessageBoxButtons.OK);
                            ShowWindowAsync(hWnd, swRestore);                            
                        }

                        // bring it to the foreground
                        SetForegroundWindow(hWnd);
                        
                        break;
                    }
                }
                return true;
            }

            return false;
        }

沒有留言:

張貼留言