Spring – Rev 3

Subversion Repositories:
Rev:
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows.Forms;
using Spring.Main;

namespace Spring
{
    internal static class Program
    {
#region Static Fields and Constants

        private static readonly Mutex Mutex = new Mutex(true, Constants.AssemblyGuid);

#endregion

#region Private Methods

        /// <summary>
        ///     The main entry point for the application.
        /// </summary>
        [STAThread]
        private static void Main()
        {
            Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);

            if (Mutex.WaitOne(TimeSpan.Zero, true))
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new MainForm());

                return;
            }

            // Foreground current other application window.
            Natives.PostMessage(
                (IntPtr) Natives.HWndBroadcast,
                Natives.WmShowMe,
                IntPtr.Zero,
                IntPtr.Zero);
        }

#endregion

#region Nested Types

        internal class Natives
        {
#region Static Fields and Constants

            public const int HWndBroadcast = 0xffff;

            public static readonly int WmShowMe = RegisterWindowMessage("WM_SHOWME");

#endregion

#region Public Methods

            [DllImport("user32.dll", EntryPoint = "RegisterWindowMessageW", SetLastError = true)]
            public static extern int RegisterWindowMessage(string lpString);

            [DllImport("user32")]
            public static extern bool PostMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);

#endregion
        }

#endregion
    }
}