C#窗口实现单例模式的方法
主要是应对这种需求:软件只允许启动一次。 将这个问题转化一下,可以这样描述:对于一个软件,在启动一个进程之后,不允许启动其它进程,如果第二次打开程序,就把已经启动的那个进程的窗口放到最前端显示。 C# winfrom应用在启动之后会首先执行program.cs里的代码,所以需要在这里下手。启动后,检测是否有相同进程名的进程,如果有,就把那个进程的窗口提到前端,然后关闭自己。 用法:把你的program.cs改造成这个样子: static class Program { //windows api,用于显示代码 [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] static extern bool SetForegroundWindow(IntPtr hWnd); /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { //核心代码 Process currProc = Process.GetCurrentProcess(); Process[] runningProc = Process.GetProcesses(); //检查规则,看进程名是否相同。可以自己灵活定制,比如需要检查用户名之类的。 var searchedProc=from a in runningProc where a.ProcessName == currProc.ProcessName select a; if (searchedProc.Count() > 1) { //选出和当前进程进程名相同,但是id不同的那个进程 Process firstProc = searchedProc.FirstOrDefault(a => a.Id != currProc.Id); IntPtr firstProcWindow = firstProc.MainWindowHandle; SetForegroundWindow(firstProcWindow); currProc.Kill(); } //-------end--------- Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } ====================================================
//前端显示 //窗口置顶 其中这个SetWindowPos最常用,用于设定窗口的位置,最常见用途是给窗口设定为置顶,等同于winform里的this.TopMost=true; 用法: WinAPI: SetWindowPos - 改变窗口的位置与状态 SetWindowPos( //hWndInsertAfter 参数可选值: //uFlags 参数可选值: 以上就是本文的学习内容,希望大家可以喜欢。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- flex4/flash builder中动态加载Module并与之交互
- XML的DTD和Schema约束
- vb.net机房收费系统重构——总结(四)软件工程文
- flash – 如何实现我自己的Cirrus(以前称为Strat
- 怎么用 cocos2d-js WebStorm chrome JetBrains I
- cocos2d-x 3.6运行cocos run出现Ndk build faile
- vue2.0在table中实现全选和反选的示例代码
- 6.7 Swift的do-try-catch错误处理模式 [Swift原创
- reactjs – 在React-Router v4中以编程方式导航
- Xmlparsing is different in 11g from 10g (文档