diff --git a/src/PackageManager.UI/PackageManager.UI.csproj b/src/PackageManager.UI/PackageManager.UI.csproj index ae10837..6cb2862 100644 --- a/src/PackageManager.UI/PackageManager.UI.csproj +++ b/src/PackageManager.UI/PackageManager.UI.csproj @@ -5,6 +5,7 @@ PackageManager.UI net461 Views\Assets\box-search-result.ico + PackageManager.Program diff --git a/src/PackageManager.UI/Program.cs b/src/PackageManager.UI/Program.cs new file mode 100644 index 0000000..f8d17e3 --- /dev/null +++ b/src/PackageManager.UI/Program.cs @@ -0,0 +1,48 @@ +using System; +using System.Threading; +using System.Diagnostics; +using System.Linq; +using System.Runtime.InteropServices; + +namespace PackageManager +{ + public static class Program + { + private const string ApplicationKey = "5CFB158B-8346-4588-926D-99006A5195B6"; + private const int RestoreWindowCommandCode = 0x09; + + [DllImport("user32.dll")] + [return: MarshalAs(UnmanagedType.Bool)] + private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); + + [DllImport("user32.dll")] + private static extern IntPtr SetForegroundWindow(IntPtr hWnd); + + [STAThread] + public static void Main() + { + using var mutex = new Mutex(false, ApplicationKey, out bool createdNew); + + if (createdNew) + { + var application = new App(); + + application.InitializeComponent(); + application.Run(); + } + else + { + var currentProcess = Process.GetCurrentProcess(); + var mainProcess = Process.GetProcesses() + .Where(x => x.Id != currentProcess.Id) + .FirstOrDefault(x => x.ProcessName == currentProcess.ProcessName); + + if (mainProcess != null) + { + ShowWindow(mainProcess.MainWindowHandle, RestoreWindowCommandCode); + SetForegroundWindow(mainProcess.MainWindowHandle); + } + } + } + } +}