首页 > 代码库 > c# 控制职能运行单一实例,再次运行显示已经运行的实例
c# 控制职能运行单一实例,再次运行显示已经运行的实例
有这么个需求,软件只能运行一个实例,软件运行后可以让其隐藏运行
再次运行这个软件的时候就让正在运行的实例显示出来
=================================
当软件隐藏后没办法拿到句柄
于是只有第一次运行的时候讲句柄保存下来,于是有了下面的
1 private void HideForm() 2 { 3 string handlestr = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle.ToInt32().ToString(); 4 string path = Application.StartupPath + "\\Handle"; 5 if (!File.Exists(path)) 6 { 7 File.Create(path).Close(); 8 } 9 using (StreamWriter writer = new StreamWriter(path, false))10 {11 writer.Write(handlestr);12 }13 this.Hide();14 }
哪里需要隐藏就调用
下面是控制
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Windows.Forms; 5 using System.Diagnostics; 6 using System.Runtime.InteropServices; 7 using System.IO; 8 9 namespace NIKE.Client10 {11 static class Program12 {13 /// <summary>14 /// 应用程序的主入口点。15 /// </summary>16 [STAThread]17 static void Main()18 {19 //StaticPass.cf = new ClientForm();20 //Application.EnableVisualStyles();21 //Application.SetCompatibleTextRenderingDefault(false);22 //Application.Run(new FormMain());23 bool ret;24 System.Threading.Mutex mutex = new System.Threading.Mutex(true, Application.ProductName, out ret);25 if (ret)26 {27 System.Windows.Forms.Application.EnableVisualStyles(); //这两行实现 XP 可视风格 28 //System.Windows.Forms.Application.DoEvents(); //这两行实现 XP 可视风格 29 Application.SetCompatibleTextRenderingDefault(false);30 System.Windows.Forms.Application.Run(new FormMain());31 // Main 为你程序的主窗体,如果是控制台程序不用这句 32 mutex.ReleaseMutex();33 }34 else35 {36 37 string path = Application.StartupPath + "\\Handle";38 int handle = 0;39 using (StreamReader reader = new StreamReader(path))40 {41 handle = int.Parse(reader.ReadToEnd());42 }43 IntPtr i = new IntPtr(handle);44 bool isok = ShowWindow(i, 1);45 SetForegroundWindow(i);46 // SetForegroundWindow(hWnd);47 // MessageBox.Show(null, "有一个和本程序相同的应用程序已经在运行,请不要同时运行多个本程序。\n\n本次打开无效", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);48 // 提示信息,可以删除。 49 Application.Exit();//退出程序 50 }51 }52 53 [DllImport("user32.dll")]54 private static extern bool SetForegroundWindow(IntPtr hWnd);55 [DllImport("user32.dll")]56 private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); 57 private const int SW_SHOWNORMAL = 1;58 59 }60 }
c# 控制职能运行单一实例,再次运行显示已经运行的实例
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。