判断程序是否已经启动的两种方法
1.调用非托管C++ dll中的方法。
首先引入System.Runtime.InteropServices命名空间。System.Runtime.InteropServices 命名空间提供各种各样支持 COM interop 及平台调用服务的成员,使程序可以与非托管代码进行交互操作。然后导入C++ dll
[DllImport("user32.dll")]
internal static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
具体代码如下:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace MyTest
{
static class Program
{
[DllImport("user32.dll")]
internal static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
IntPtr handle = FindWindow(null, "MyWindow");
if (!System.IntPtr.Zero.Equals(handle))
{
MessageBox.Show("程序已经启动");
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
2.应用System.Diagnostics命名空间下的相关方法
System.Diagnostics命名空间提供用于访问系统进程,调试应用程序和跟踪代码执行情况的类
代码如下:
namespace MyTest
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
if (IsExisttExe())
{
MessageBox.Show("程序已经启动");
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
private static bool IsExisttExe()
{
bool exist = false;
Process[] p = Process.GetProcessesByName(Path.GetFileNameWithoutExtension(Application.ExecutablePath));
if (p != null && p.Length > 1)
{
exist = true;
}
return exist;
}
}
}