CMINVOKECOMMANDINFOEX 구조체(shobjidl_core.h)

바로 가기 메뉴 명령에 대한 확장된 정보를 포함합니다. 이 구조체는 유니코드 값을 사용할 수 있는 CMINVOKECOMMANDINFO 의 확장 버전입니다.

구문

typedef struct _CMINVOKECOMMANDINFOEX {
  DWORD   cbSize;
  DWORD   fMask;
  HWND    hwnd;
  LPCSTR  lpVerb;
  LPCSTR  lpParameters;
  LPCSTR  lpDirectory;
  int     nShow;
  DWORD   dwHotKey;
  HANDLE  hIcon;
  LPCSTR  lpTitle;
  LPCWSTR lpVerbW;
  LPCWSTR lpParametersW;
  LPCWSTR lpDirectoryW;
  LPCWSTR lpTitleW;
  POINT   ptInvoke;
} CMINVOKECOMMANDINFOEX;

멤버

cbSize

형식:DWORD

이 구조체의 크기(바이트)입니다. 이 멤버는 IContextMenu::InvokeCommand의 호출자에 의해 채워지고 구현에서 테스트하여 구조체가 CMINVOKECOMCOMMANDINFO가 아닌 CMINVOKECOMMANDINFOEX 구조체임을 알고 있어야 합니다.

fMask

형식:DWORD

0 또는 다음 플래그 중 하나 이상이 원하는 동작을 나타내고 구조체의 다른 필드를 사용할 것임을 나타내도록 설정됩니다.

CMIC_MASK_HOTKEY

dwHotKey 멤버가 유효합니다.

CMIC_MASK_ICON

hIcon 멤버가 유효합니다. Windows Vista를 기준으로 이 플래그는 사용되지 않습니다.

CMIC_MASK_FLAG_NO_UI

IContextMenu::InvokeCommand의 구현은 명령을 수행하는 동안 사용자 인터페이스 요소(예: 오류 메시지)를 표시할 수 없습니다.

CMIC_MASK_UNICODE

바로 가기 메뉴 처리기는 ANSI에 해당하는 멤버 대신 lpVerbW, lpParametersW, lpDirectoryWlpTitleW 멤버를 사용해야 합니다. 일부 바로 가기 메뉴 처리기는 유니코드를 지원하지 않을 수 있으므로 lpVerb, lpParameters, lpDirectorylpTitle 멤버에도 유효한 ANSI 문자열을 전달해야 합니다.

CMIC_MASK_NO_CONSOLE

바로 가기 메뉴 처리기가 새 프로세스를 만들어야 하는 경우 일반적으로 새 콘솔을 만듭니다. CMIC_MASK_NO_CONSOLE 플래그를 설정하면 새 콘솔 만들기가 표시되지 않습니다.

CMIC_MASK_HASLINKNAME

lpTitle 멤버는 바로 가기 파일에 대한 전체 경로를 포함합니다. CMIC_MASK_HASTITLE 함께 사용합니다.

참고 이 값은 Windows Vista 이상 시스템에서 지원되지 않습니다.
 

CMIC_MASK_HASTITLE

lpTitle 멤버가 유효합니다.

참고 이 값은 Windows Vista 이상 시스템에서 지원되지 않습니다.
 

CMIC_MASK_FLAG_SEP_VDM

이 플래그는 16비트 Windows 기반 애플리케이션을 참조하는 경우에만 유효합니다. 설정된 경우 바로 가기가 가리키는 애플리케이션이 프라이빗 VDM(Virtual DOS Machine)에서 실행됩니다. 설명 부분을 참조하세요.

CMIC_MASK_ASYNCOK

IContextMenu::InvokeCommand 구현은 호출을 처리하기 위해 새 스레드 또는 프로세스를 스핀오프할 수 있으며 호출되는 함수가 완료될 때 차단할 필요가 없습니다. 예를 들어 동사가 "삭제"된 경우 모든 항목이 삭제되기 전에 IContextMenu::InvokeCommand 호출이 반환할 수 있습니다. 이는 권고이므로 이 플래그를 지정하는 애플리케이션을 호출해도 호출하는 동사의 구현에 익숙하지 않은 경우 이 요청이 적용되도록 보장할 수 없습니다.

CMIC_MASK_NOASYNC

Windows Vista 이상. IContextMenu::InvokeCommand의 구현은 완료되기 전에 반환되지 않고 동기적이어야 합니다. 권장되므로 이 플래그를 지정하는 애플리케이션을 호출해도 호출하는 동사의 구현에 익숙하지 않은 경우 이 요청이 적용되도록 보장할 수 없습니다.

CMIC_MASK_SHIFT_DOWN

SHIFT 키를 누릅니다. 동사가 호출된 이후 변경되었을 수 있는 키보드의 현재 상태를 폴링하는 대신 사용합니다.

CMIC_MASK_CONTROL_DOWN

Ctrl 키를 누릅니다. 동사가 호출된 이후 변경되었을 수 있는 키보드의 현재 상태를 폴링하는 대신 사용합니다.

CMIC_MASK_FLAG_LOG_USAGE

IContextMenu::InvokeCommand의 구현이 "최근 문서" 메뉴와 같은 기능에 대해 호출되는 항목을 추적하려고 할 수 있음을 나타냅니다.

CMIC_MASK_NOZONECHECKS

영역 검사 수행하지 마세요. 이 플래그를 사용하면 ShellExecuteExIAttachmentExecute에 의해 배치된 영역 검사를 우회할 수 있습니다.

CMIC_MASK_PTINVOKE

ptInvoke 멤버가 유효합니다.

hwnd

형식: HWND

바로 가기 메뉴의 소유자인 창에 대한 핸들입니다. 확장은 이 핸들을 표시되는 메시지 상자 또는 대화 상자의 소유자로 사용할 수도 있습니다. 호출자는 표시될 수 있는 모든 UI의 소유자 창으로 사용할 수 있는 합법적인 HWND를 지정해야 합니다. UI 스레드에서 호출할 때 HWND를 지정하지 못하면(창이 이미 생성된 스레드) IContextMenu::InvokeCommand 호출 구현 시 재진입 및 가능한 버그가 발생합니다.

lpVerb

형식: LPCSTR

수행할 명령의 언어 독립적 이름을 지정하는 null로 끝나는 문자열의 주소입니다. 이 멤버는 일반적으로 애플리케이션에서 명령을 활성화할 때 문자열입니다. 시스템은 다음 명령 문자열에 대해 미리 정의된 상수 값을 제공합니다.

상수 명령 문자열
CMDSTR_RUNAS "RunAs"
CMDSTR_PRINT "인쇄"
CMDSTR_PREVIEW "미리 보기"
CMDSTR_OPEN "열기"
 

고정 집합이 아닙니다. 새 정식 동사는 상황에 맞는 메뉴 처리기에서 발명할 수 있으며 애플리케이션은 이를 호출할 수 있습니다.

정식 동사가 있고 메뉴 처리기가 정식 동사를 구현하지 않는 경우 다음 처리기가 이 동사를 처리할 수 있도록 오류 코드를 반환해야 합니다. 이렇게 하지 않으면 ShellExecute를 비롯한 시스템의 기능이 중단됩니다.

또는 포인터 대신 이 매개 변수는 MAKEINTRESOURCE(오프셋)일 수 있습니다. 여기서 오프셋 은 수행할 명령의 메뉴 식별자 오프셋입니다. 구현에서는 IS_INTRESOURCE 매크로를 사용하여 이 대안이 사용되고 있음을 감지할 수 있습니다. 셸은 사용자가 메뉴 명령을 선택할 때 이 대안을 사용합니다.

lpParameters

형식: LPCSTR

선택적 매개 변수입니다. 이 멤버는 셸 확장에 의해 삽입된 메뉴 항목에 대해 항상 NULL 입니다.

lpDirectory

형식: LPCSTR

선택적 작업 디렉터리 이름입니다. 이 멤버는 셸 확장에 의해 삽입된 메뉴 항목에 대해 항상 NULL 입니다.

nShow

형식: int

명령이 창을 표시하거나 애플리케이션을 시작하는 경우 ShowWindow 함수에 전달할 SW_ 값 집합입니다.

dwHotKey

형식:DWORD

명령에 의해 활성화된 모든 애플리케이션에 할당할 선택적 바로 가기 키입니다. fMask 멤버가 CMIC_MASK_HOTKEY 지정하지 않으면 이 멤버는 무시됩니다.

hIcon

형식: HANDLE

명령에 의해 활성화된 모든 애플리케이션에 사용할 아이콘입니다. fMask 멤버가 CMIC_MASK_ICON 지정하지 않으면 이 멤버는 무시됩니다.

lpTitle

형식: LPCSTR

ASCII 제목입니다.

lpVerbW

형식: LPCWSTR

유니코드 동사(사용할 수 있는 명령의 경우).

lpParametersW

형식: LPCWSTR

유니코드 매개 변수입니다. 이 매개 변수를 사용할 수 있는 명령에 대한 매개 변수입니다.

lpDirectoryW

형식: LPCWSTR

유니코드 디렉터리입니다. 이 디렉터리를 사용할 수 있는 명령에 대한 디렉터리입니다.

lpTitleW

형식: LPCWSTR

유니코드 제목입니다.

ptInvoke

형식: POINT

명령이 호출되는 지점입니다. fMask 멤버가 CMIC_MASK_PTINVOKE 지정하지 않으면 이 멤버는 무시됩니다. 이 멤버는 인터넷 Explorer 4.0 이전에는 유효하지 않습니다.

설명

IContextMenu::InvokeCommand 선언은 pici 매개 변수에 대한 CMINVOKECOMMANDINFO 구조를 지정하지만 CMINVOKECOMMANDINFOEX 구조체를 수락할 수도 있습니다. 이 메서드를 구현하는 경우 cbSize 를 검사하여 전달된 구조를 확인해야 합니다.

기본적으로 모든 16비트 Windows 기반 애플리케이션은 단일 공유 VDM에서 스레드로 실행됩니다. 별도로 실행하면 크래시가 단일 VDM만 종료된다는 장점이 있습니다. 고유한 VDM에서 실행되는 다른 모든 프로그램은 정상적으로 작동합니다. 또한 별도의 VDM에서 실행되는 16비트 Windows 기반 애플리케이션에는 별도의 입력 큐가 있습니다. 즉, 한 애플리케이션이 일시적으로 응답을 중지하는 경우 별도의 VDM의 애플리케이션은 계속해서 입력을 받습니다. 별도 실행의 단점은 실행 시 메모리가 훨씬 더 많이 필요하다는 것입니다.

CMINVOKECOMMANDINFOEX 자체는 Shobjidl.h에 정의되어 있지만 모든 플래그에 대한 모든 액세스 권한을 갖도록 Shellapi.h도 포함해야 합니다.

참고 Windows Vista 이전에는 이 구조체가 Shlobj.h에서 선언되었습니다.
 

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional, Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
머리글 shobjidl_core.h(Shobjidl.h 포함)