软件工程

本类阅读TOP10

·PHP4 + MYSQL + APACHE 在 WIN 系统下的安装、配置
·Linux 入门常用命令(1)
·Linux 入门常用命令(2)
·使用 DCPROMO/FORCEREMOVAL 命令强制将 Active Directory 域控制器降级
·DirectShow学习(八): CBaseRender类及相应Pin类的源代码分析
·基于ICE方式SIP信令穿透Symmetric NAT技术研究
·Windows 2003网络负载均衡的实现
·一网打尽Win十四种系统故障解决方法
·数百种 Windows 软件的免费替代品列表
·收藏---行百里半九十

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
如何让程序只运行一次实例

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Diagnostics;
using System.Reflection;

 public class OneInstnace
 {
 [STAThread]
 public static void Main()
 {
 //Get the running instance.
 Process instance = RunningInstance();
 if (instance == null)
 {
 //There isn't another instance, show our form.
 Application.Run (new Form());
 }
 else
 {
 //There is another instance of this process.
 HandleRunningInstance(instance);
 }
 }
 public static Process RunningInstance()
 {
 Process current = Process.GetCurrentProcess();
 Process[] processes = Process.GetProcessesByName (current.ProcessName);

 //Loop through the running processes in with the same name
 foreach (Process process in processes)
 {
 //Ignore the current process
 if (process.Id != current.Id)
 {
 //Make sure that the process is running from the exe file.
 if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") ==
 current.MainModule.FileName)
 {
 //Return the other process instance.
 return process;
 }
 }
 }

 //No other instance was found, return null.
 return null;
 }


 public static void HandleRunningInstance(Process instance)
 {
 //Make sure the window is not minimized or maximized
 ShowWindowAsync (instance.MainWindowHandle , WS_SHOWNORMAL);

 //Set the real intance to foreground window
 SetForegroundWindow (instance.MainWindowHandle);
 }

 [DllImport("User32.dll")]

private static extern bool ShowWindowAsync(
 IntPtr hWnd, int cmdShow);
 [DllImport("User32.dll")] private static extern bool
 SetForegroundWindow(IntPtr hWnd);
 private const int WS_SHOWNORMAL = 1;
 }




相关文章

相关软件