diff --git a/NaiveSharp/Program.cs b/NaiveSharp/Program.cs index a58ecad..f48252b 100644 --- a/NaiveSharp/Program.cs +++ b/NaiveSharp/Program.cs @@ -1,4 +1,7 @@ using System; +using System.Diagnostics; +using System.Reflection; +using System.Runtime.InteropServices; using System.Windows.Forms; namespace NaiveSharp @@ -10,7 +13,46 @@ static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new MainWindow()); + Process instance = RunningInstance(); + if (instance == null) + { + Application.Run(new MainWindow()); + } + else + { + MessageBox.Show("Naive# has been running.", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information); + HandleRunningInstance(instance); + } } + + public static Process RunningInstance() + { + Process current = Process.GetCurrentProcess(); + Process[] processes = Process.GetProcessesByName(current.ProcessName); + foreach (Process process in processes) + { + if (process.Id != current.Id) + { + if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == current.MainModule.FileName) + { + return process; + } + } + } + return null; + } + + public static void HandleRunningInstance(Process instance) + { + ShowWindow(instance.MainWindowHandle, WS_SHOWNORMAL); + SetForegroundWindow(instance.MainWindowHandle); + } + + [DllImport("User32.dll")] + private static extern bool ShowWindow(IntPtr hWnd, int cmdShow); + + [DllImport("User32.dll")] + private static extern bool SetForegroundWindow(IntPtr hWnd); + private const int WS_SHOWNORMAL = 1; } }