C# WinForm只允许运行一个窗体实例

来源:互联网 发布:数据库mandatory 编辑:程序博客网 时间:2024/06/06 17:35

隐藏到托盘的程序显示到桌面


static class Program    {        [DllImport("user32.dll")]        public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);        [DllImport("user32.dll ", SetLastError = true)]        static extern void SwitchToThisWindow(IntPtr hWnd, bool fAltTab);        [DllImport("user32.dll", EntryPoint = "ShowWindow", CharSet = CharSet.Auto)]        public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);        public const int SW_RESTORE=9;        public static IntPtr formhwnd;        static Form1 form = null;        ///<summary>        /// 应用程序的主入口点。        ///</summary>        [STAThread]        static void Main()        {            Application.EnableVisualStyles();            Application.SetCompatibleTextRenderingDefault(false);            string proc = Process.GetCurrentProcess().ProcessName;            Process[] processes = Process.GetProcessesByName(proc);            if (processes.Length <= 1)            {                form = new Form1();                Application.Run(form);            }            else            {                for (int i = 0; i < processes.Length; i++)                {                    if (processes[i].Id != Process.GetCurrentProcess().Id)                    {                        if (processes[i].MainWindowHandle.ToInt32() == 0)                        {                            formhwnd = FindWindow(null, "Form1");                            ShowWindow(formhwnd,SW_RESTORE);                            SwitchToThisWindow(formhwnd, true);                        }                        else                        {                            SwitchToThisWindow(processes[i].MainWindowHandle, true);                        }                    }                }            }        }    }


原创粉丝点击