<<함수 선언부>>
//콜백 함수 선언
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=¤tPage=1&listtype=0