天天看點

C#禁止重複運作程式,并激活原托盤程式

 static class Program

    {

        [DllImport("User32.dll")]

        private static extern bool ShowWindowAsync(int hWnd, int cmdShow);

        [DllImport("User32.dll", EntryPoint = "FindWindow")]

        private static extern int FindWindow(string lpClassName, string lpWindowName);

        [DllImport("User32")]

        static extern int SetForegroundWindow(int hwnd);

        private const int SW_NORMAL = 1; //正常彈出窗體   

        #region 方法1

        [STAThread]

        static void Main()

        {

            Application.EnableVisualStyles();

            Application.SetCompatibleTextRenderingDefault(false);

            Process currentProcess = Process.GetCurrentProcess();

            //判斷程式是否已經啟動  

            Mutex mutex = new Mutex(false, "GTranslate");

            bool Running = !mutex.WaitOne(0, false);

            if (!Running)

            {

                Application.Run(new Form1());

            }

            else

            {

                // MessageBox.Show("程式已經運作" + process.MainWindowTitle, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);  

                int WINDOW_HANDLER = FindWindow(null, "資料庫備份");   //程式标題或類名二選1  

                if (WINDOW_HANDLER > 0)

                {

                    //MessageBox.Show(WINDOW_HANDLER.ToString());  

                    ShowWindowAsync(WINDOW_HANDLER, SW_NORMAL);

                    SetForegroundWindow(WINDOW_HANDLER);

                }

                Environment.Exit(0);

            }

        }

        #endregion      

    }

}