안녕하세요

프로그램 과정에서 막혔던 문제들에 대한 해결책 정리


페이지 목록

2013년 1월 4일 금요일

[MFC] 실행 중인 프로그램 리스트를 얻어오고 제어하기

<<함수 선언부>>

//콜백 함수 선언
BOOL CALLBACK EnumWindowCallBack(HWND hwnd, LPARAM lParam);
//

<<InitInstance() 내부에 선언>>

// 이미 프로그램이 실행 중이면 종료하고 아니면, 업데이트 진행
BOOL RTSnotRun = EnumWindows(EnumWindowCallBack,0);

 if(RTSnotRun == FALSE)
 {
  AfxMessageBox("프로그램 종료 후 실행해 주시기 바랍니다.");
  return FALSE;
 }
 //

<<CallBack 함수 선언>>

//프로그램 이름 가져오기
BOOL CALLBACK EnumWindowCallBack(HWND hwnd, LPARAM lParam)
{
 char str_title[255];
 int length;
 GetWindowText(hwnd, str_title,255);
 length = GetWindowTextLength(hwnd);

 // Windows ctrl + alt + delete 에 나오는 프로그램 명
 if (IsWindowVisible(hwnd) && length > 0 && !strncmp(str_title, "프로그램명",10))  {
  printf("callback enumwindows in str_title : %s\n", str_title);
  return FALSE;
 }
 return TRUE;
}
CallBack 함수를 호출하여, 실행 중인 프로그램 리스트를 얻어 온다.

얻어 온 리스트 중 제어할려는 프로그램 명을 적은 후, 반환 받아서 제어.

위 소스에서 "프로그램명" 에 해당 하는 프로그램 이름을 적으면 된다.

예) Excel  => "Excel" 로 적고, strncmp 기능을 이용하여, 자신이 비교할려는

문자 수를 정하고, 해당 문자와 같은 문자가 있는 프로그램일 경우, false를 반환,

그렇지 않을 경우, true를 반환 한다.

 false 를 반환 할 경우, 동일 프로그램이 실행 중임으로 이 때 해당하는 프로세스 진행

true 를 반환 할 경우, 프로그램이 실행 하고 있지 않을 때 코드를 작성하면 된다.

IsWindowVisible(hwnd) && length > 0 은 ctrl+Alt + del 키를 눌렀을 때 나오는 프로그램인지

확인 하는 것이고, str_title에 ctrl + Alt + del 키를 눌렀을 때 나오는 프로그램 이름이 저장

되게 된다.


참조 : http://frog3147.tistory.com/entry/MFC%EC%97%90%EC%84%9C-%ED%98%84%EC%9E%AC-%EC%8B%A4%ED%96%89-%EC%A4%91%EC%9D%B8-%EC%9D%91%EC%9A%A9%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EB%AA%A9%EB%A1%9D-%EC%96%BB%EC%96%B4%EC%98%A4%EA%B8%B0

http://blog.naver.com/PostView.nhn?blogId=qblan&logNo=60135883727&categoryNo=47&viewDate=&currentPage=1&listtype=0