반응형
어떠한 프로그램을 실행시킬 때 해당 프로그램의 점유율을 조금이라도 높여주기 위해 혹은 그 외의 이유로 다른 프로그램을 최소화 할 때가 있다. 여러가지 접근 방법들이 존재하겠지만, 쉽게 구현할 수 있는 몇가지 방법들에 대해서 정리해 보도록하겠다.
1. 윈도우 이벤트 발생
- 장점 : 빠르고 쉽게 구현이 가능하다.
- 단점 : 단점은 딱히 없는것 같다 아직 발견하지 못하였다.
// "Window Key + D" Event
keybd_event(VK_LWIN, 0, 0, 0);
keybd_event('D', 0, 0, 0); // Choose Win+D or Win+M
keybd_event('D', 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);
2. Enum Window
- 장점 : 특수한 윈도우 핸들에 대해서 Skip이 가능하다.
- 단점 : Callback에 시간이 오래 걸리며 Minimize하는 과정이 눈으로 식별될 정도로 느리다.
// Enum Window
static BOOL CALLBACK HideAllWindowsProc(HWND hWnd, LPARAM lParam)
{
if (IsWindowVisible(hWnd) && GetWindowTextLength(hWnd))
{
char szText[MAX_PATH] = {0,};
GetWindowTextA(hWnd, szText, MAX_PATH);
ShowWindow(hWnd, SW_MINIMIZE);
}
return TRUE;
}
EnumWindows(HideAllWindowsProc, NULL);
3. 바탕 화면 보기 이용
- 장점 : 구현이 쉽고 간단하다.
- 단점 : 해당 파일이 없거나 언어별로 이름이 다를 수 있으므로 파일을 배포하는 것이 안전하다.
// Shell Execute #include <shellapi.h> ShellExecute(NULL, "open", " 바탕 화면 보기.scf", NULL, NULL, SW_HIDE);
4. Shell Dll 이용
- 장점 : "바탕 화면 보기"를 누른 것과 정확히 같은 기능을 한다. (MSDN 인용)
- 단점 : 구현이 비교적 번거롭다.
#include <shldisp.h>
if (FAILED(CoInitialize(NULL)))
return;
IShellDispatch* pDisp = NULL;
HRESULT hr = CoCreateInstance(CLSID_Shell, NULL, CLSCTX_INPROC_SERVER, IID_IShellDispatch, (void**)&pDisp);
if (SUCCEEDED(hr))
{
pDisp->MinimizeAll();
// pDisp->UndoMinimizeALL();
pDisp->Release();
}
CoUninitialize();
※ 창이 최소화 되는 시간이 있기 때문에, Sleep을 주거나 윈도우 생성 시기를 늦추는 등 동기화에 많은 신경을 써야한다.
반응형
'Game Dev > Article' 카테고리의 다른 글
| Vista에서 관리자 권한으로 프로세스 실행시키기 (0) | 2009.05.28 |
|---|---|
| XML에 특수 문자 삽입 (0) | 2009.05.07 |
| 간단한 ActiveX 수동설치 만들기 (2) | 2009.04.28 |
| 중첩을 피하는 코딩 스타일 (1) | 2009.04.12 |