using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;

namespace PosStart
{
    static class Program
    {
        /// <summary>
        /// 해당 응용 프로그램의 주 진입점입니다.
        /// </summary>
        [STAThread]
        //#Rhee, 20180122 중복실행 방지 및 프로그램 최상위 포커스(활성화) Start
        [DllImport("user32.dll")]
        private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

        [DllImport("user32.dll")]
        private static extern bool SetForegroundWindow(IntPtr hWnd);

        [DllImport("user32.dll")]
        private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
        private const int SW_SHOWNORMAL = 1;
        //#Rhee, 20180122 중복실행 방지 및 프로그램 최상위 포커스(활성화) End

        static void Main(string[] args)
        {
            // 중복 실행 방지
            string sProcessName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
            Process[] arProcess = Process.GetProcessesByName(sProcessName);

            if (arProcess.Length > 1)
            {
                MessageBox.Show("Already Execute Porgram");

                Application.Exit();
                return;
            }

            if (args == null || args.Length == 0)
            {
                if (File.Exists(Directory.GetCurrentDirectory() + @"\PosMain.txt") == true)
                {
                    // PosMain 실행되어 있으면 실행 안함.
                    //#Rhee, 20180122 중복실행 방지 및 프로그램 최상위 포커스(활성화) Start
                    // 기존
                    /*
                    Process[] arPosPgm = Process.GetProcessesByName("PosMain");
                    foreach (Process pPosPgm in arPosPgm)
                    {
                        MessageBox.Show("Already Execute PosMain");

                        //Application.Exit();
                        return;
                    }*/
                    // 변경
                    IntPtr hWnd = FindWindow(null, "POS MAIN");
                    
                    if (!hWnd.Equals(IntPtr.Zero))
                    {
                        ShowWindowAsync(hWnd, SW_SHOWNORMAL);               // 윈도우가 최소화 되어 있다면 활성화.                        
                        SetForegroundWindow(hWnd);                          // 윈도우에 포커스 최상위.
                        return;
                    }
                    //#Rhee, 20180122 중복실행 방지 및 프로그램 최상위 포커스(활성화) End
                }
            }
            else 
            {
                // PosMain 강제 종료
                Process[] arPosPgm = Process.GetProcessesByName("PosMain");
                foreach(Process pPosPgm in arPosPgm)
                {
                    pPosPgm.Kill();
                    System.Threading.Thread.Sleep(1000);
                }

                if (args[0] == "EXIT")
                {
                    //Application.Exit();
                    return;
                }
            }

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new frmPosStart());
        }
    }
}
