MFC 프로그램에서 한번에 하나의 프로그램만 실행을 가능하게 해야할 경우가 있습니다.
이럴 경우 CreateMutex()를 활용하여 중복 실행을 막을 수 있습니다.
Mutex 생성시 이름을 설정하는데, 동일한 이름은 OS 상에서 하나만 생성이 가능합니다.
그래서 해당 process가 해제되거나 CloseHandle()을 호출하기 전까지는 재생성이 불가능 합니다.
CreateMutex()의 2번째 인자를 FALSE로 할 경우에는 여러 개의 process로 접근이 가능합니다.
자세한 사항은 아래 Link를 참고해 주세요.
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682411%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396
CreateMutex()를 사용하여 중복 실행을 방지하는 방법은 아래와 같습니다.
위 Code에는 중복 실행 되었을 경우 해당 Window를 찾아서 Minimize된 상태면 띄워주고, 다른 Window보다 앞으로 나오게 하는 Code가 포함되어 있습니다.
그럴 필요가 없는 경우 해당 Code를 지우고 return FALSE; 만 해주시면 됩니다.
Window를 찾는데 CWnd::FindWindow()를 사용했는데, 첫번째 인자를 줄 경우에는 class명으로 찾고, 두번쨰 인자를 줄 경우에는 Window 상단에 있는 caption text를 이용해서 찾습니다.
SetWindowText()를 이용해서 임의로 caption text를 수정 할 수 있습니다.
제가 두 가지 경우 다 테스트 해봤는데,
직접 작성한 프로그램의 경우 class로 찾기가 잘 안됩니다.
(Visual Studio 설치시 같이 설치되는 spy++을 이용하니 class 명이 다르게 표시됩니다.)
caption으로 찾기의 경우도 caption이 바뀌는 프로그램의 경우 적용하기 어렵습니다.
이부분은 사용하실때 충분히 테스트 해보시기 바랍니다.
댓글 없음:
댓글 쓰기