Realman's World

[C#] Process의 WindowState 제어하기 본문

Language/C#

[C#] Process의 WindowState 제어하기

리얼맨 2008. 10. 21. 19:28

프로그램에서 특정 exe 파일을 실행시키는 경우가 종종 있다.

이 때 해당 프로그램이 실행되고 있는지의 여부를 판단하고 실행되고 있지 않으면 실행시키고

실행 중인 경우는 실행 중인 프로그램을 활성화시키도록 해보자.

1. 실행 판단

            Process[] processes = Process.GetProcesses();
            foreach (Process proc in processes)
            {
                if (proc.ProcessName.Equals(sProc))
                {
                    isExecuting = true;
                    break;
                }
            }

   - 위와 같이 GetProcesses 함수를 이용하여 실행시킬 파일의 이름과 비교한다. 이때 파일 이름은 ".exe" 앞의 문자열만 해당된다.

2. 실행 중인 프로그램 활성화              

        [DllImport("User32",EntryPoint="FindWindow")]
        private static extern IntPtr FindWindow(string lpClassName,string lpWindowName);

        [DllImport("user32.dll")]
        public static extern void SetForegroundWindow(IntPtr hWnd); 

        [DllImport("user32.dll")]
        public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
        private const int SW_SHOWNORMAL = 1;

   - 우선 위와 같이 API 함수를 선언한다.

     이 때 SW_SHOWNORMAL 상수는 WindowState를 결정하는 상수이다. 

     window를 숨기거나 최대화, 최소화 등으로 설정할 수도 있는데 이것은 해당 상수를 위와같이 선언하고 파라미터로 넘기면 된다.

     자세한 내용은 검색해야 한다.

            Process[] processes = Process.GetProcesses();
            foreach (Process proc in processes)
            {
                if (proc.ProcessName.Equals(sProc))
                {
                    // 윈도우 핸들러
                    IntPtr procHandler = FindWindow(null, proc.MainWindowTitle);

                    // 활성화
                    ShowWindow(procHandler, SW_SHOWNORMAL);
                    SetForegroundWindow(procHandler);

                    return;
                }
          
          }

Comments