본문 바로가기

02. 프로그래밍/C/C++

[MFC] 외부 프로그램/프로세스 실행, ShellExcute()

MFC에서 외부 프로그램/프로세스를 실행시키기에 좋은 함수로 ShellExecute() 가 있다. 

(일반 C/C++에서도 사용 가능)


필요 헤더


#include <windows.h>

#include <shellapi.h>

(MFC에서는 따로 안해줘도 됨)


함수 원형


HINSTANCE ShellExecute(hwnd, lpOperation, lpFile, ipParameters, lpDirectory, nShowCmd);


사용 예


::ShellExecute(NULL, _T("open"), _T("shutdown"), _T("-a"), NULL, SW_HIDE);

'shutdown' 이라는 프로그램을 open. 뒤의 파라미터는 '-a'. 창은 숨김.


자세히


각각 인자를 보면


hWnd : parent window. 작업이 window에 관련되있지 않다면 일반적으로 NULL 로 설정.

lpOperation : 작업 종류. 

- edit : editor 로 해당 문서(lpFile)를 연다. 문서파일(*.txt 는 될테고 다른 확장자는 모르겠음)이 아니면 fail.

- explore : 탐색기로 해당 폴더(lpFile)를 연다.

- find : 해당 폴더(lpDirectory)를 검색위치로 검색창을 연다. (테스트 해보았지만 검색위치 지정 실패...)

- print : 해당 파일(lpFile) 출력창을 연다. 문서파일이 아니면 fail.

- NULL : 가능하면 default 값 (뭔지 모르겠음), 아니면 open. 둘다 안되면 registry의 첫번째 값.

lpFile : 대상 파일 경로. lpDirectory에 상대경로를 사용하면 lpFile에서는 파일 이름만 사용하라는 것 같다.

lpParameters : lpFIle이 실행가능한 파일일 경우, 파일 뒤에 들어가는 옵션 파라미터들. (/s /f 이런 것)

lpDirectory : 작업폴더 경로. NULL로 지정하면 현재 파일이 있는 폴더로 설정.

nShowCmd : 파일이 열렸을 때 어떻게 보여줄 것인지에 대한 flag. 문서일 경우에는 연결프로그램으로 flag가 넘겨지는데, 그것을 어떻게 처리하는가는 연결프로그램에 달려있다.

- SW_HIDE(0) : 숨기고 다른 프로그램 활성화

- SW_MAXIMIZE(3) : 최대화

- SW_MINIMIZE(6) : 최소화 시키고 창 z-order (활성화 순서) 중 다음것 활성화.

- SW_RESTORE(9) : 활성화 하고 보여줌. 최소화나 최대화 되어있으면 원래 크기로 복원.

- SW_SHOW(5) : 현재 크기와 위치로 활성화

- SW_SHOWDEFAULT(10) : 해당 프로그램의 ShowWindow를 호출하도록 하여 초기값의 메인 윈도우 오픈.

- SW_SHOWMAXIMIZED(3) : 활성화하고 최대화

- SW_SHOWMINIMIZED(2) : 활성화하고 최소화

- SW_SHOWMINNOACTIVE(7) : 최소화해서 보여주고 기존에 활성화 되어있던 창이 활성화.

- SW_SHOWNA(8) : 현재 상태로 보여줌. 활성화 되어있던 창이 활성되 된 채로 유지.

- SW_SHOWNORMAL(1) : 활성화하고 보여줌.최소화나 최대화 되어 있으면 원래 크기로 복원. (SW_RESTORE와 약간의 차이가 있으나 생략)


Return Value : int로 캐스팅 가능

- 0 : 메모리나 리소스 부족

- ERROR_FILE_NOT_FOUND : 파일 없음

- ERROR_PATH_NOT_FOUND : 경로 없음

- ERROR_BAD_FORMAT : 열수 없는 파일

- SE_ERR_ACCESSDENIED : 접근 금지

- SE_ERR_ASSOCINCOMPLETE : 파일명이 불완전하거나 불가능? 

- SE_ERR_DDEBUSY : DDE(Dynamic Data Exchange)가 다른 작업중

- SE_ERR_DDEFAIL :  DDE 실패

- SE_ERR_DDETIMEOUT : DDE 요청 시간 초과

- SE_ERR_DLLNOTFOUND : DLL 파일 없음

- SE_ERR_FNF : = ERROR_FILE_NOT_FOUND

- SE_ERR_NOASSOC : 해당 확장자를 열수 있는 연결프로그램 없음

- SE_ERR_OOM : 메모리 부족

- SE_ERR_PNF : = ERROR_PATH_NOT_FOUND

- SE_ERR_SHARE : 다른 응용프로그램에서 사용중


* 참조 : http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v=vs.85).aspx

'02. 프로그래밍 > C/C++' 카테고리의 다른 글

Visual Studio 2010에서 콘솔 종료 방지  (0) 2011.12.29
winapi 콘솔 띄우기  (0) 2011.04.02
pragma once / region  (0) 2011.02.13