• Daum블로그로 구독
  • HanRSS
  • Google
  • RSS
  • Bloglines

IT2011. 10. 21. 09:15

C# 외부 프로그램 종료하기 / C# Process.GetProcessesByName


프로그램을 하다보면 필요에 의해서 제작중인 프로그램 내에서 외부프로그램(타프로그램)을 종료시켜야할 경우가 있습니다.

이럴경우 C#에서는 어떻게 할까요?

여러 프로그램 언어을 접해보신 분들이 알고계신 알고리즘과 동일하게 C#에서도 프로세스를 찾아서 Kill하는 방식과 FindWindow를 찾아서 SendMessage를 사용하는 방식을 사용합니다.

그런데 C#에서 어떻게 사용을 해야하는지, 사용하는 방법을 모를 경우가 있습니다.  

저도 도데체 어디에 있으며 어떻게 사용해야하는 지 난감하더군요. 여기저기 뒤지고 검색해서 간단하게 구현한 소스를 소개합니다.

서두에 언급한 것처럼 2가지 방법을 소개할 예정이며 코드를 보시면 쉽게 이해가 되리라 생각됩니다.

1. 프로그램의 타이틀로 찾아서 종료

 
   1) FindWindow를 사용해서 해당 프로그램의 핸들을 찾습니다.
   2) SendMessage를 사용해서 종료 메시지를 보냅니다.

C#,C Sharp, .Net, 외부프로그램 종료, 타 프로그램 종료, GetProcessesByName, FindWindow, SendMessage, Process, Kill

2. 프로세스의 이름으로 찾아서 종료


   1) Process.GetProcessesByName을 사용해서 해당 프로그램의 정보를 가져옵니다.
   2) Process.Kill을 사용해서 외부 프로그램을 종료합니다.

C#,C Sharp, .Net, 외부프로그램 종료, 타 프로그램 종료, GetProcessesByName, FindWindow, SendMessage, Process, Kill

3. 프로그램 소스 코드

   
// Process를 사용하기 위해 아래 네임스페이스 추가
using System.Diagnostics;

// DllImport를 사용하기 위해 아래 네임스페이스 추가
using System.Runtime.InteropServices; 

    // API Import 
   [DllImport("user32.dll")]
   public static extern IntPtr FindWindow(string lpClassName,string lpWindowName);
        
   [DllImport("user32.dll")]
   public static extern int SendMessage(IntPtr hWnd,uint Msg,int wParam,int lParam);  

   private void ErrExit()
   {
        // 타이틀 바의 이름으로 찾아서 프로그램 종료
        IntPtr hwd = FindWindow(null, "테스트.txt - 메모장");
        if (hwd.ToString() != "0")
            SendMessage(hwd, 0x0010, 0, 0);

         // 프로세스 프로그램 이름으로 찾아서 프로그램 종료
        Process[] p = Process.GetProcessesByName("notepad");
        if (p.GetLength(0) > 0)
                p[0].Kill();
    }

C# 프로그래밍에 조금이나마 도움이 되셨으면 합니다.
http://all4cs.tistory.com - 두그미의 사는 이야기


Posted by 4Cs