Visual Basic, C & C++
C & C++ 분류

[Win API] ShellExecute 함수 API / MFC / 프로그래밍

컨텐츠 정보

본문

출처 : https://blog.naver.com/gksdntjr714/220380339098


ShellExecute


 Minimum supported client

 Windows XP [desktop apps only]

 Minimum supported server

 Windows 2000 Server [desktop apps only]

 Header

 Shellapi.h

 Library

 Shell32.lib

 DLL

 Shell32.dll (version 3.51 or later)

 Unicode and ANSI names

 ShellExecuteW (Unicode) and ShellExecuteA (ANSI)

 



인자는 이렇습니다.



HWND hWnd

UI 또는 오류 메세지를 표시하는 데 사용되는 부모 윈도우의 핸들입니다. 작업이 윈도우에 관련되지 않은 경우 이 값은 NULL이 될 수 있습니다.



LPCTSTR lpOeration

아래 목록들에 있는 null로 끝나는 문자열에 대한 포인터로서, 수행할 내용을 지정합니다. 가능한 동작은 특정 파일이나 폴더에 따라 달라집니다. 일반적으로 개체의 바로 가기 메뉴에서 사용할 수 있는 작업을 수행합니다. 일반적으로 사용되는 문자열들입니다. (MSDN에서 '동사'라고 표현을 했네요.)

 동사

설명 

"edit"

 <편집> 편집기를 시작하고 편집할 문서를 엽니다. lpFile에 문서 파일의 경로를 넘겨주어야합니다.

"explore"

 <탐색> lpFile 매개 변수에 의해 지정된 폴더를 탐색합니다.

"find"

 <검색> lpDirectory 매개 변수에 의해 지정된 디렉토리부터 검색을 시작합니다.

"open"

 <열기> lpFile 매개 변수에 의해 지정된 항목을 엽니다. 항목은 파일이나 폴더입니다.

"print"

 <출력> lpFile 매개 변수에 의해 지정된 파일을 인쇄합니다. lpFile 이 문서 파일이 아닌 경우, 함수는 실패합니다.

NULL

 <기본> 가능한 경우 기본 동사가 사용됩니다. 그렇지 않으면, "open" 동사가 사용됩니다. 모두 가능하지 않을 시에, 시스템은 레지스트리에 나열된 첫번째 동사를 사용합니다.



LPCTSTR lpFile

지정된 동사를 실행할 파일 또는 객체를 지정하는 null로 끝나는 문자열에 대한 포인터입니다. 쉘 네임스페이스 개체를 지정하려면, 완전한 구문 분석 이름을 전달합니다. 모든 동사가 모든 개체에서 지원되지는 않습니다. 예를 들어, 모든 문서 형식이 "인쇄"동사를 지원하지는 않습니다. 상대 경로가 lpDirectory 매개 변수를 사용하는 경우 lpFile에 대한 상대 경로를 사용하지 마십시오.



LPCTSTR lpParameters

lpFile이 실행 파일을 지정하는 경우, 이 매개 변수는 응용 프로그램에 전달되는 매개 변수를 지정하는 null로 끝나는 문자열에 대한 포인터입니다. 이 문자열의 형식은 호출 될 동사에 의해 결정됩니다. lpFile이 문서 파일을 지정하는 경우, lpParameters은 NULL 이어야합니다.



LPCTSTR lpDirectory

액션의 기본 (작업) 디렉토리를 지정하는 null로 끝나는 문자열에 대한 포인터입니다. 이 값이 NULL인 경우, 현재 작업 디렉토리가 사용됩니다. 상대 경로가 lpFile에 제공되는 경우, lpDirectory에 대한 상대 경로를 사용하지 마십시오.



INT nShowCmd

이 플래그는 애플리케이션이 열릴 때 표시되는 방법을 지정합니다. lpFile이 문서 파일을 지정하는 경우, 이 플래그는 단지 관련 애플리케이션에 전달됩니다. 그것을 처리하는 방법은 결정하는 응용 프로그램에 달려있습니다. 이 값은 Winuser.h에 정의되어 있습니다.

플래그

 설명

SW_HIDE (0) 

 윈도우를 숨기고 다른 윈도우를 활성화합니다. 

 SW_MAXIMIZE (3)

 지정된 윈도우를 최대화합니다. 

 SW_MINIMIZE (6)

 지정된 윈도우를 최소화 하고 바로 아래에 있는 윈도우(위에서 다음번째의 z-order를 가진 윈도우)를 활성화합니다.  

SW_RESTORE (9) 

 윈도우를 활성화하고 표시합니다. 윈도우가 최소화 또는 최대화 된 경우 Windows 운영체제가 이를 원래 크기와 위치로 복원합니다. 최소화 된 윈도우를 복원 할 때 응용 프로그램이 플래그를 지정해야합니다. 

SW_SHOW (5) 

 윈도우를 활성화하고 현재 크기와 위치에 표시합니다. 

 SW_SHOWDEFAULT (10)

 응용 프로그램을 시작한 프로그램에서 CreateProcess 함수에 전달한 STARTUPINFO 구조체에 지정된 SW_ 플래그에 따라 표시 상태를 설정합니다. 응용 프로그램은 메인 윈도우의 초기 표시 상태를 설정하려면 ShowWindow 플래그를 호출해야합니다.

 SW_SHOWMAXIMIZED (3)

 윈도우를 활성화하고 최대화된 상태로 표시합니다. 

 SW_SHOWMINIMIZED (2)

 윈도우를 활성화하고 최소화된 상태로 표시합니다.

 SW_SHOWMINNOACTIVE (7)

 최소화된 윈도우로 윈도우를 표시합니다. 활성 윈도우는 활성 상태로 유지됩니다. 

 SW_SHOWNA (8)

 해당 윈도우의 현재 상태로 윈도우를 표시합니다. 활성 윈도우는 활성 상태로 유지됩니다.

SW_SHOWNOACTIVATE (4) 

 가장 최근의 크기와 위치에 윈도우를 표시합니다.활성 윈도우는 활성 상태로 유지됩니다. 

SW_SHOWNORMAL (1) 

윈도우를 활성화하고 표시합니다. 윈도우가 최소화 또는 최대화 된 경우 Windows 운영체제가 이를 원래 크기와 위치로 복원합니다. 처음으로 윈도우를 표시 할 때 응용 프로그램이 플래그를 지정해야합니다. 



HINSTANCE 반환값

 

함수가 성공하면 32보다 큰 값을 반환하고, 함수가 실패하면 그 실패의 원인을 나타내는 오류 값을 반환합니다. 반환 값은 16 비트 Windows 응용 프로그램과의 호환성을 위해 HINSTANCE로 캐스팅됩니다. 하지만 정말 HINSTANCE는 아닙니다. int로만 캐스팅되고 32 혹은 이하 다음 오류 코드 중 하나에 비교 될 수 있습니다.

 에러

 설명

 0 (NULL)

 운영 체제의 메모리 또는 리소스가 부족합니다.

 ERROR_FILE_NOT_FOUND

 지정된 파일을 찾을 수 없습니다.

 ERROR_PATH_NOT_FOUND

 지정된 경로를 찾을 수 없습니다.

 ERROR_BAD_FORMAT

 유효하지 않은 .exe파일입니다 (윈32 .exe가 아니거나 .exe 이미지에 에러가 있습니다.)

 SE_ERR_ACCESSDENIED

 운영 체제가 지정된 파일에 대한 액세스를 거부했습니다.

 SE_ERR_ASSOCINCOMPLETE

 파일 이름 연관이 불완전하거나 유효하지 않습니다.

 SE_ERR_DDEBUSY

 다른 *DDE 트랜잭션이 처리되지 않았기 때문에 DDE 트랜잭션을 완료 할 수 없습니다.

 SE_ERR_DDEFAIL

 DDE 트랜잭션이 실패했습니다.

 SE_ERR_DDETIMEOUT

 요청이 시간 초과하여 DDE 트랜잭션을 완료 할 수 없습니다.

 SE_ERR_DLLNOTFOUND

 지정된 DLL을 찾을 수 없습니다.

 SE_ERR_FNF

 지정된 파일을 찾을 수 없습니다.

SE_ERR_NOASSOC 

 주어진 파일 이름 확장명에 연결된 응용 프로그램이 없습니다. 당신이 인쇄할 수 없는 파일을 인쇄하려고하면 이 오류가 반환됩니다.

 SE_ERR_OOM

 메모리가 부족하여 작업을 완료 할 수 없습니다.

 SE_ERR_PNF

 지정된 경로를 찾을 수 없습니다.

 SE_ERR_SHARE

 공유 위반이 발생했습니다.

* DDE(Dynamic Data Exchange)는 대략 다른 운영체계에서 정보가 공유되도록 하거나 프로그램간에 통신이 되도록 해주는 기술입니다.



MSDN을 가져와 최대한 의역해보았습니다. 그래봤자 사실, 이것만 보고 쓰려고하기엔 조금 어렵죠. 그래서 일반적으로 사용하는 것들이 있습니다. 아래 내용은 아래 링크에서 퍼와 조금씩 수정하였습니다.


1. 응용프로그램 실행

ShellExecute(NULL, "open", "실행하려는 파일의 경로", NULL, NULL, SW_SHOW);


카카오톡 실행

ShellExecute(NULL, "open", "C:\\Program Files (x86)\\Kakao\\KakaoTalk\\KakaoTalk.exe");


2. 특정 프로그램으로 원하는 파일 열기

ShellExecute(NULL, "open", "파일을 열 프로그램", "텍스트파일 경로", NULL, SW_SHOW);


메모장으로 D드라이브의 test.txt 열기

ShellExecute(NULL, "open", "notepad", "D:\\test.txt", NULL, SW_SHOW);


3. 웹 페이지 열기

URL로 접속합니다. 현재 웹브라우저가 실행중인 경우 새 탭 혹은 현재 페이지에서 접속합니다.

ShellExecute(NULL, "open", "URL", NULL, NULL, SW_SHOW);


무조건 새로운 웹브라우저를 실행해 접속합니다.

ShellExecute(NULL, "open", "iexplore", "URL", NULL, SW_SHOW);


4. 응용프로그램의 인쇄기능 사용하기

ShellExecute(NULL, "print", "인쇄할 파일 경로", NULL, NULL, SW_SHOW);


D드라이브의 test.txt를 실행하여 인쇄

ShellExecute(NULL, "print", "D:\\test.txt", NULL, NULL, SW_SHOW);


5. 탐색기 실행하기

탐색기를 실행시켜 명시한 경로에 위치시킵니다. 세번째 매개변수에는 explorer라고 명시해야 합니다.

ShellExecute(NULL, "open", "explorer", "위치시킬 경로", NULL, SW_SHOW);


5.1 특정 파일 선택하기

ShellExecute(NULL, "open", "explorer", "/select,경로", NULL, SW_SHOW);


D드라이브의 test.txt 선택하기

ShellExecute(NULL, "open", "explorer", "/select,D:\\test.txt", NULL, SW_SHOW);


5.2 특정 폴더를 루트로 설정하기

ShellExecute 함수로 탐색기를 실행할 때 자신이 원하는 폴더를 루트로 선택합니다.

ShellExecute(NULL, "open", "explorer", "/root,경로", NULL, SW_SHOW);

관련자료

댓글 0
등록된 댓글이 없습니다.
Today's proverb
진정한 기쁨은 나의 아집을 버려 갈 때마다 느껴오는 타인의 대한 배려의식에서 오는 이해이다. 이로써 서로에 대한 존경과 용서가 함께하게 되는 것이다.