using System;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Reflection;
namespace ArLi.CommonPrj
{
public class one_instance_Check
{
public one_instance_Check()
{
}
#region how use this?
/*
using ArLi.CommonPrj;
if (one_instance_Check.goCheck("Process Exist !")) {
Application.Run (new Form1());
}
*/
#endregion
[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;
public static bool GoCheck(string waringMessage_ifExist) {
Process instance = RunningInstance();
if (instance == null) {
return true;
}
else {
if (waringMessage_ifExist != null) {
System.Windows.Forms.MessageBox.Show(
null,
waringMessage_ifExist,
System.Windows.Forms.Application.ProductName.ToString(),
System.Windows.Forms.MessageBoxButtons.OK,
System.Windows.Forms.MessageBoxIcon.Exclamation
);
}
HandleRunningInstance(instance);
return false;
}
}
private 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;
}
private 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);
}
}
}
浙公网安备 33010602011771号