如何实现单点登录(一台计算机,只能运行一个客户端)
2012-03-08 09:49
681 查看
首先,我是在wpf上面做开发,检测单点应该是在应用程序初始化的时候进行,所以将代码写在了App.xaml.cs代码文件中。
覆写
方法。
再次在 base.OnStartup(e); 之前写上检测进程的代码。
使用count检测进程是否已经存在,若已经存在 ,则执行CheckExistProcess("WMS.Views.WpfView"); 方法,然后结束本进程。
调用Windows API实现将进程窗体获得焦点,并处于窗口顶端,如是最小化状态,则还原。
覆写
protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e);}
方法。
再次在 base.OnStartup(e); 之前写上检测进程的代码。
int count = 0; //Process[] a = Process.GetProcesses(); foreach (Process item in Process.GetProcesses()) { if (item.ProcessName == "WMS.Views.WpfView") { ++count; if (count == 2) { CheckExistProcess("WMS.Views.WpfView"); Environment.Exit(0); } } }
使用count检测进程是否已经存在,若已经存在 ,则执行CheckExistProcess("WMS.Views.WpfView"); 方法,然后结束本进程。
#region 实现窗体获得焦点并还原 [DllImport("USER32.DLL", CharSet = CharSet.Auto)] private static extern int ShowWindow( System.IntPtr hWnd, int nCmdShow ); [DllImport("USER32.DLL", CharSet = CharSet.Auto)] private static extern bool SetForegroundWindow( System.IntPtr hWnd ); [DllImport("user32.dll ")] public extern static int SetActiveWindow(IntPtr hwnd); [DllImport("user32.dll ")] private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow); private const int SW_NORMAL = 1; //判断是否存在名为processName的进程(程序),存在的话使它获得焦点 //例 if (CheckExistProcess("JobExec") == false) private static bool CheckExistProcess(string processName) { bool aRet = false; System.Diagnostics.Process[] arrProcess = System.Diagnostics.Process.GetProcessesByName(processName); if (arrProcess.Length > 0) { aRet = true; } //09/06/05 Stt Add by Meng バグ3249 if (aRet) { try { foreach (System.Diagnostics.Process hProcess in arrProcess) { ShowWindow(hProcess.MainWindowHandle, SW_NORMAL); ShowWindowAsync(hProcess.MainWindowHandle, 9);// 9就是SW_RESTORE标志,表示还原窗体 SetForegroundWindow(hProcess.MainWindowHandle); SetActiveWindow(hProcess.MainWindowHandle); break; } } catch { } } //09/06/05 End Add by Meng バグ3249 return aRet; } #endregion
调用Windows API实现将进程窗体获得焦点,并处于窗口顶端,如是最小化状态,则还原。
相关文章推荐
- winform 中怎样实现一个程序只能在一台计算机上运行
- winform 中怎样实现一个程序只能在一台计算机上运行
- c# Winform 如何实现程序只能同时运行一个实例
- 2.如何让一个项目的用户目前只能是姓名登录,优化为增加一个字段为姓名和用户名同时都可以实现登录 ,并且用户名不能使中文?
- normal用户同一时间只能有一个登录session,如何实现多个登录?
- c++builder 如何实现一个应用程序只能打开一个进程
- c#如何实现一个线程暂停,等待用户输入文本后继续运行?
- 如何实现使得一个普通用户以root身份运行命令和如何使用sudo命令?
- 如何做到同一个账号同一时段只能登录一个
- 如何限制域用户看到域中其他的用户及计算机信息。是否设置只让用户在只能看到一个OU中的用户
- JavaWeb实现同一帐号同一时间只能一个地点登陆(类似QQ登录的功能)
- C#在一台客户端进行了某个操作以后如何让其他不同的客户端如何实现相同的操作(一)
- 登录页面实现客户端验证、客户端验证是如何实现的?
- Python实现保证只能运行一个脚本实例
- System.Threading.Mutex:一台电脑上面只有一个进程实例在运行,利用Mutex互斥量可以实现了这个功能
- 如何实现一个账号仅能一个终端登录呢
- 通过Process使应用程序在一台电脑上只能有一个在运行
- Java Web 实现QQ登录功能一个帐号同一时间只能一个人登录
- java web中实现同一帐号同一时间只能一个地点登陆(类似QQ登录的功能)
- 如何让域中用户只能登录到某一台计算机?