반응형
어떠한 프로그램을 실행시킬 때 해당 프로그램의 점유율을 조금이라도 높여주기 위해 혹은 그 외의 이유로 다른 프로그램을 최소화 할 때가 있다. 여러가지 접근 방법들이 존재하겠지만, 쉽게 구현할 수 있는 몇가지 방법들에 대해서 정리해 보도록하겠다.
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 |