관리 메뉴

ㄴrㅎnㅂrㄹrㄱi

SHELLEXECUTEINFO 본문

Ntool Works/작업 참조

SHELLEXECUTEINFO

님투 2007. 11. 9. 00:53
반응형

SHELLEXECUTEINFO

ShellExecuteEx 함수에 의해서 작성되는 프로세스의 정보를 정의합니다.

typedef struct _SHELLEXECUTEINFO {
    DWORD     cbSize;       // 구조체 사이즈(=60)
    ULONG     fMask;        // 옵션
    HWND      hwnd;         // 친윈도우
    LPCTSTR   lpVerb;       // 동작명
    LPCTSTR   lpFile;       // 파일명
    LPCTSTR   lpParameters; // 커멘드 라인 파라미터
    LPCTSTR   lpDirectory;  // 기동시 디렉토리
    int       nShow;        // 표시 형식
    HINSTANCE hInstApp;     // 결과치
    LPVOID    lpIDList;     // 아이템ID리스트
    LPCTSTR   lpClass;      // 클래스명
    HKEY      hkeyClass;    // 파일 클래스의 레지스트리 키
    DWORD     dwHotKey;     // hot key
    union {
        HANDLE  hIcon;      // 파일 클래스의 아이콘
        HANDLE  hMonitor;   // 모니터
    } DUMMYUNIONNAME;
    HANDLE    hProcess;     // 프로세스 핸들
} SHELLEXECUTEINFO, FAR *LPSHELLEXECUTEINFO;

멤버

cbSize

이 구조체의 사이즈입니다. 60 (을)를 지정합니다.

fMask

옵션을 설정합니다.이 파라미터의 지정에 의해서 유효 멤버가 결정됩니다.이하의 값의 편성으로 지정합니다.

의미
0x00000001 (SEE_MASK_CLASSNAME)

lpClass 멤버에 의해서 주어지는 클래스명을 사용합니다.

0x00000003 (SEE_MASK_CLASSKEY)

hkeyClass 멤버에 의해서 주어지는 클래스 키를 사용합니다.

0x00000004 (SEE_MASK_IDLIST)

lpIDList 멤버에 의해서 주어지는 아이템 ID 리스트를 사용합니다.

0x0000000c (SEE_MASK_INVOKEIDLIST)

어플리케이션을 호출하기 위해서 lpIDList 멤버에 의해서 주어지는 아이템 ID 리스트를 사용합니다. lpIDList 멤버가 0 (NULL) 의 경우는, 아이템 ID 리스트를 작성하고 어플리케이션을 호출합니다.이 플래그는 SEE_MASK_IDLIST (을)를 포함합니다.

0x00000010 (SEE_MASK_ICON)

hIcon 멤버로 주어지는 아이콘을 사용합니다.이 플래그를 SEE_MASK_HMONITOR (와)과 조합해 지정할 수 없습니다.

0x00000020 (SEE_MASK_HOTKEY)

dwHotKey 멤버로 주어지는 hot key를 사용합니다.

0x00000040 (SEE_MASK_NOCLOSEPROCESS)

프로세스 핸들을 클로우즈 하지 않게 합니다. hProcess 멤버에 프로세스 핸들이 격납됩니다.

0x00000080 (SEE_MASK_CONNECTNETDRV)

lpName 멤버는 네트워크상의 파일의 UNC(Universal Naming Convention) 패스명인 것을 나타냅니다.

0x00000100 (SEE_MASK_FLAG_DDEWAIT)

DDE 대화가 개시되는 경우에는, 그것이 종료할 때까지 재개되지 않습니다.

0x00000200 (SEE_MASK_DOENVSUBST)

lpDirectory 멤버나 lpFile 멤버로 주어지는 문자열로 지정된 환경 변수를 확장합니다.

0x00000400 (SEE_MASK_FLAG_NO_UI)

에러가 발생해도, 에러 메시지 박스를 표시하지 않습니다.

0x00004000 (SEE_MASK_UNICODE)

Unicode 어플리케이션인 것을 나타내는데 이 플래그를 지정합니다.

0x00008000 (SEE_MASK_NO_CONSOLE)

parent process의 콘솔을 사용하지 않고 , 새로운 프로세스를 위해서 콘솔을 작성합니다.이것은 CreateProcess 함수로 CREATE_NEW_CONSOLE 플래그를 지정했을 경우와 동등합니다.

0x00200000 (SEE_MASK_HMONITOR)

멀티 모니터 시스템상에서 모니터를 지정하는 경우에, 이 플래그를 사용합니다.사용되는 모니터는 hMonitor 멤버에 의해서 지정됩니다.이 플래그를 SEE_MASK_ICON (와)과 조합해 지정할 수 없습니다.

0x04000000 (SEE_MASK_FLAG_LOG_USAGE)

Windows XP 이후: 어플리케이션이 기동된 회수를 보관 유지합니다.기동된 회수가 특히 많은 어플리케이션은, 스타트 메뉴의, 자주(잘) 사용되는 어플리케이션의 리스트에 표시됩니다.

hwnd

함수 실행중에 시스템이 메시지 박스를 표시하는 경우를 위해서, 그 메시지 박스의 오너 윈도우의 핸들을 지정합니다.

lpVerb

동작명을 나타내는 문자열의 주소를 지정합니다.이용 가능한 동작명은 파일이나 폴더에 의존합니다.통상, 오브젝트의 쇼트 컷 메뉴로부터 이용 가능한 동작명은, 이 멤버로 지정할 수 있습니다.일반적으로, 동작명에는 이하의 것이 사용됩니다.

문자열 의미
"edit"

에디터를 기동해, 편집을 위해서 문서를 엽니다. lpFile 멤버가 문서 파일이 아닌 경우는, 함수는 실패합니다.

"explore"

lpFile 멤버로 지정된 폴더를 익스플로러로 열립니다.

"find"

지정된 디렉토리로부터 개시되는 검색을 실행합니다.

"open"

lpFile 멤버로 지정된 실행 가능 파일, 문서 파일, 폴더를 엽니다.

"print"

lpFile 멤버로 지정된 문서 파일을 인쇄합니다. lpFile 멤버가 문서 파일이 아닌 경우는, 함수는 실패합니다.

"properties"

파일 또는 폴더의 프롭퍼티를 표시합니다.

Windows 95/98/NT: 이 멤버에 0 (NULL) (을)를 지정했을 경우, 디폴트의 동작이 레지스트리상에서 유효하고, 이용 가능한 경우에는, 디폴트의 동작이 사용됩니다.그 이외의 경우에는 "open" 하지만 사용됩니다.

Windows Me/2000/XP: 이 멤버에 0 (NULL) (을)를 지정했을 경우, 디폴트의 동작이 이용 가능한 경우에는, 디폴트의 동작이 사용됩니다.그렇지 않은 경우에는 "open" 하지만 사용됩니다.디폴트의 동작이 지정되지 않고, "open" 의 동작이 이용 가능하지 않은 경우에는, 레지스트리에 있는 최초의 동작이 사용됩니다.

lpFile

파일 또는 오브젝트의 이름을 나타내는 문자열의 주소를 지정합니다.

lpFile 멤버에 SEE_MASK_INVOKEIDLIST 하지만 지정되어 있는 경우는, lpFile 멤버를 사용해 파일 시스템 패스로 아이템을 지정하는지, 또는 lpIDList 멤버를 사용해 PIDL 그리고 아이템을 지정할 수 있습니다.

파일명에 패스가 포함되지 않은 경우는, 커런트 디렉토리에 있는 파일이다고 보입니다.

lpParameters

커멘드 라인 파라미터를 나타내는 문자열의 주소를 지정합니다.커멘드 라인 파라미터가 필요없을 때는 0 (NULL) (을)를 지정합니다. lpFile 멤버가 문서 파일을 나타내는 경우는 0 (NULL) (을)를 지정하지 않으면 안됩니다.

lpDirectory

작업 디렉토리를 나타내는 문자열의 주소를 지정합니다.명시적으로 지정되지 않는 경우는, 커런트 디렉토리가 작업 디렉토리로서 사용됩니다.

nShow

윈도우의 표시 형식을 지정합니다. ShowWindow 함수의 nCmdShow 파라미터로 지정된다 SW_ 값의 어느쪽이든을 지정합니다.

hInstApp

함수가 성공하면 33 이상의 값이 됩니다.실패하면 32 이하의 값이 격납됩니다.주된 에러 코드는 이하와 같이 됩니다.

의미
2 (SE_ERR_FNF) 파일이 발견되지 않습니다.
3 (SE_ERR_PNF) 패스가 발견되지 않습니다.
5 (SE_ERR_ACCESSDENIED) 파일 액세스가 거부되었습니다.
8 (SE_ERR_OOM) 메모리 부족합니다.
26 (SE_ERR_SHARE) 공유 위반이 발생했습니다.
27 (SE_ERR_ASSOCINCOMPLETE) 파일 관련지어가 완전하지 않을까 무효입니다.
28 (SE_ERR_DDETIMEOUT) DDE 트랜잭션(transaction)가 타임 아웃에 의해 중단되었습니다.
29 (SE_ERR_DDEFAIL) DDE 트랜잭션(transaction)가 실패했습니다.
30 (SE_ERR_DDEBUSY) 다른 DDE 트랜잭션(transaction)가 처리되고 있었기 때문에 DDE 트랜잭션(transaction)를 종료할 수 없었습니다.
31 (SE_ERR_NOASSOC) 파일 관련지어가 불명합니다.
32 (SE_ERR_DLLNOTFOUND) DLL 하지만 발견되지 않습니다.
lpIDList

실행하는 파일을 식별하는 아이템 ID 리스트를 포함한다 ITEMIDLIST 구조체에의 포인터( PIDL )(을)를 지정합니다. fMask 멤버로 SEE_MASK_IDLIST 또는 SEE_MASK_INVOKEIDLIST (을)를 지정했을 경우만 유효합니다.

lpClass

파일 클래스명 또는 GUID (을)를 지정하는 문자열의 주소를 지정합니다. fMask 멤버로 SEE_MASK_CLASSNAME (을)를 지정했을 경우만 유효합니다.

hkeyClass

파일 클래스의 레지스트리 키의 핸들을 지정합니다. fMask 멤버로 SEE_MASK_CLASSKEY (을)를 지정했을 경우만 유효합니다.

dwHotKey

어플리케이션과 관련짓는 hot key를 지정합니다.하위 워드에는 가상 키코드(을)를, 상위 워드에는 이하의 수식 플래그를 지정합니다. fMask 멤버로 SEE_MASK_HOTKEY (을)를 지정했을 경우만 유효합니다.

0x01 (HOTKEYF_SHIFT) [Shift]
0x02 (HOTKEYF_CONTROL) [Ctrl]
0x04 (HOTKEYF_ALT) [Alt]
0x08 (HOTKEYF_EXT) 확장 키
hIcon

파일 클래스의 아이콘의 핸들입니다. fMask 멤버로 SEE_MASK_ICON (을)를 지정했을 경우만 유효합니다.

hMonitor

문서가 표시되는 모니터의 핸들입니다. fMask 멤버로 SEE_MASK_HMONITOR (을)를 지정했을 경우만 유효합니다.

hProcess

새롭게 작성된 프로세스의 핸들이 격납됩니다.이 경우는, 핸들이 불필요하게 되면 CloseHandle 함수로 핸들을 클로우즈 하지 않으면 안됩니다. fMask 멤버로 SEE_MASK_NOCLOSEPROCESS 하지만 지정되지 않는 경우는 항상 0 (NULL) 하지만 격납됩니다.

SEE_MASK_NOCLOSEPROCESS 하지만 지정되었을 경우여도, 새롭게 프로세스가 기동되지 않았던 경우에는 0 (NULL) 하지만 격납됩니다.예를 들면, 문서로서 URL (을)를 지정했을 경우에, Internet Explorer 하지만 이미 기동되고 있으면, 새로운 프로세스가 기동되지 않고 문서 그 윈도우에 표시되기 위해, 이 멤버는 0 (NULL) (이)가 됩니다.

함수 호출의 결과로서 새로운 프로세스가 기동되었을 경우에서도, hProcess 멤버에 프로세스의 핸들이 격납된다고는 할 수 없습니다.예를 들면, SEE_MASK_INVOKEIDLIST 플래그를 지정해 IContextMenu 인터페이스를 호출했을 경우에는 프로세스 핸들은 돌려주어지지 않습니다.

해설

ShellExecuteEx 함수 호출 스렛드가 메시지 루프를 가지지 않는 경우나,ShellExecuteEx 함수를 호출하자마자 스렛드 또는 프로세스가 종료하는 경우에는, fMask 멤버에 SEE_MASK_FLAG_DDEWAIT 플래그를 지정하지 않으면 안됩니다.

대응 정보

Windows 95 이후 / Windows NT 3.51 이후

변수와의 대응

HSP 변수 멤버
멤버명 오프셋 사이즈
shexec.0 cbSize ( = 60 ) 0 4
shexec.1 fMask 4 4
shexec.2 hwnd 8 4
shexec.3 lpVerb 12 4
shexec.4 lpFile 16 4
shexec.5 lpParameters 20 4
shexec.6 lpDirectory 24 4
shexec.7 nShow 28 4
shexec.8 hInstApp 32 4
shexec.9 lpIDList 36 4
shexec.10 lpClass 40 4
shexec.11 hkeyClass 44 4
shexec.12 dwHotKey 48 4
shexec.13 hIcon / hMonitor 52 4
shexec.14 hProcess 56 4
반응형

'Ntool Works > 작업 참조' 카테고리의 다른 글

가상 키코드  (0) 2007.11.09
SHNAMEMAPPING  (0) 2007.11.09
SHFILEOPSTRUCT  (0) 2007.11.09
IMalloc::Free  (0) 2007.11.09
IMalloc::Alloc  (0) 2007.11.09
Comments