/// <summary>Indicates normal operation. A shortcut menu extension, namespace extension, or drag-and-drop handler can add all menu items.</summary>
CMF_NORMAL=0x00000000,
/// <summary>
/// The user is activating the default action, typically by double-clicking. This flag provides a hint for the shortcut menu extension to add nothing
/// if it does not modify the default item in the menu. A shortcut menu extension or drag-and-drop handler should not add any menu items if this
/// value is specified. A namespace extension should at most add only the default item.
/// </summary>
CMF_DEFAULTONLY=0x00000001,
/// <summary>The shortcut menu is that of a shortcut file (normally, a .lnk file). Shortcut menu handlers should ignore this value.</summary>
CMF_VERBSONLY=0x00000002,
/// <summary>The Windows Explorer tree window is present.</summary>
CMF_EXPLORE=0x00000004,
/// <summary>This flag is set for items displayed in the Send To menu. Shortcut menu handlers should ignore this value.</summary>
CMF_NOVERBS=0x00000008,
/// <summary>
/// The calling application supports renaming of items. A shortcut menu or drag-and-drop handler should ignore this flag. A namespace extension
/// should add a Rename item to the menu if applicable.
/// </summary>
CMF_CANRENAME=0x00000010,
/// <summary>
/// No item in the menu has been set as the default. A drag-and-drop handler should ignore this flag. A namespace extension should not set any of the
/// menu items as the default.
/// </summary>
CMF_NODEFAULT=0x00000020,
///<summary>0x00000100. The calling application wants extended verbs. Normal verbs are displayed when the user right-clicks an object. To display extended verbs, the user must right-click while pressing the Shift key.</summary>
CMF_EXTENDEDVERBS=0x00000100,
/// <summary>
/// This value is not available.
/// <para>
/// Windows Server 2003 and Windows XP: 0x00000040. A static menu is being constructed. Only the browser should use this flag; all other shortcut
/// menu extensions should ignore it.
/// </para>
/// </summary>
CMF_INCLUDESTATIC=0x00000040,
/// <summary>
/// 0x00000080. The calling application is invoking a shortcut menu on an item in the view (as opposed to the background of the view).
/// <para>Windows Server 2003 and Windows XP: This value is not available.</para>
/// </summary>
CMF_ITEMMENU=0x00000080,
/// <summary>
/// 0x00000200. The calling application intends to invoke verbs that are disabled, such as legacy menus.
/// <para>Windows Server 2003 and Windows XP: This value is not available.</para>
/// </summary>
CMF_DISABLEDVERBS=0x00000200,
/// <summary>
/// 0x00000400. The verb state can be evaluated asynchronously.
/// <para>Windows Server 2008, Windows Vista, Windows Server 2003 and Windows XP: This value is not available.</para>
/// </summary>
CMF_ASYNCVERBSTATE=0x00000400,
/// <summary>
/// 0x00000800. Informs context menu handlers that do not support the invocation of a verb through a canonical verb name to bypass
/// IContextMenu::QueryContextMenu in their implementation.
/// <para>Windows Server 2008, Windows Vista, Windows Server 2003 and Windows XP: This value is not available.</para>
/// </summary>
CMF_OPTIMIZEFORINVOKE=0x00000800,
/// <summary>
/// 0x00001000. Populate submenus synchronously.
/// <para>Windows Server 2008, Windows Vista, Windows Server 2003 and Windows XP: This value is not available.</para>
/// </summary>
CMF_SYNCCASCADEMENU=0x00001000,
/// <summary>
/// 0x00001000. When no verb is explicitly specified, do not use a default verb in its place.
/// <para>Windows Server 2008, Windows Vista, Windows Server 2003 and Windows XP: This value is not available.</para>
/// </summary>
CMF_DONOTPICKDEFAULT=0x00002000,
/// <summary>
/// 0xffff0000. This flag is a bitmask that specifies all bits that should not be used. This is to be used only as a mask. Do not pass this as a
/// parameter value.
/// </summary>
CMF_RESERVED=0xffff0000,
}
/// <summary>Indicate desired behavior and indicate that other fields in the structure are to be used for <see cref="CMINVOKECOMMANDINFOEX"/>.</summary>
/// <summary>The hIcon member is valid. As of Windows Vista this flag is not used.</summary>
CMIC_MASK_ICON=0x00000010,
/// <summary>The dwHotKey member is valid.</summary>
CMIC_MASK_HOTKEY=0x00000020,
/// <summary>
/// Windows Vista and later. The implementation of IContextMenu::InvokeCommand should be synchronous, not returning before it is complete. Since this
/// is recommended, calling applications that specify this flag cannot guarantee that this request will be honored if they are not familiar with the
/// implementation of the verb that they are invoking.
/// </summary>
CMIC_MASK_NOASYNC=0x00000100,
/// <summary>The system is prevented from displaying user interface elements (for example, error messages) while carrying out a command.</summary>
CMIC_MASK_FLAG_NO_UI=0x00000400,
/// <summary>
/// The shortcut menu handler should use lpVerbW, lpParametersW, lpDirectoryW, and lpTitleW members instead of their ANSI equivalents. Because some
/// shortcut menu handlers may not support Unicode, you should also pass valid ANSI strings in the lpVerb, lpParameters, lpDirectory, and lpTitle members.
/// </summary>
CMIC_MASK_UNICODE=0x00004000,
/// <summary>
/// If a shortcut menu handler needs to create a new process, it will normally create a new console. Setting the CMIC_MASK_NO_CONSOLE flag suppresses
/// the creation of a new console.
/// </summary>
CMIC_MASK_NO_CONSOLE=0x00008000,
/// <summary>Wait for the DDE conversation to terminate before returning.</summary>
CMIC_MASK_ASYNCOK=0x00100000,
/// <summary>Do not perform a zone check. This flag allows ShellExecuteEx to bypass zone checking put into place by IAttachmentExecute.</summary>
CMIC_MASK_NOZONECHECKS=0x00800000,
/// <summary>
/// Indicates that the implementation of IContextMenu::InvokeCommand might want to keep track of the item being invoked for features like the "Recent
/// documents" menu.
/// </summary>
CMIC_MASK_FLAG_LOG_USAGE=0x04000000,
/// <summary>
/// The SHIFT key is pressed. Use this instead of polling the current state of the keyboard that may have changed since the verb was invoked.
/// </summary>
CMIC_MASK_SHIFT_DOWN=0x10000000,
/// <summary>The ptInvoke member is valid.</summary>
CMIC_MASK_PTINVOKE=0x20000000,
/// <summary>
/// The CTRL key is pressed. Use this instead of polling the current state of the keyboard that may have changed since the verb was invoked.
/// </summary>
CMIC_MASK_CONTROL_DOWN=0x40000000,
}
/// <summary>Flags specifying the information to return.</summary>
/// <param name="uType">Flags specifying the information to return.</param>
/// <param name="pReserved">Reserved. Applications must specify NULL when calling this method and handlers must ignore this parameter when called.</param>
/// <param name="pszName">The reference of the buffer to receive the null-terminated string being retrieved.</param>
/// <param name="cchMax">Size of the buffer, in characters, to receive the null-terminated string.</param>
/// <returns>If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.</returns>
/// <param name="uType">Flags specifying the information to return.</param>
/// <param name="pReserved">Reserved. Applications must specify NULL when calling this method and handlers must ignore this parameter when called.</param>
/// <param name="pszName">The reference of the buffer to receive the null-terminated string being retrieved.</param>
/// <param name="cchMax">Size of the buffer, in characters, to receive the null-terminated string.</param>
/// <returns>If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.</returns>
/// <para>This interface also provides the methods of the IContextMenu and IContextMenu2 interfaces, from which it inherits.</para>
/// <para>When to Implement</para>
/// <para>Implement IContextMenu3 if your shortcut menu extension needs to process the WM_MENUCHAR message.</para>
/// <para>
/// This message is forwarded to IContextMenu3::HandleMenuMsg2 only if a QueryInterface call for an <c>IContextMenu3</c> interface
/// pointer is successful, which indicates that the object supports this interface.
/// </para>
/// <para>When to Use</para>
/// <para>You do not call this interface directly. IContextMenu3 is used by the operating system only when it has confirmed that your application is aware of this interface.</para>
/// <para><c>Note</c><c>Windows Vista and later.</c> Prior to Windows Vista this interface was declared in Shlobj.h.</para>
/// <param name="uType">Flags specifying the information to return.</param>
/// <param name="pReserved">Reserved. Applications must specify NULL when calling this method and handlers must ignore this parameter when called.</param>
/// <param name="pszName">The reference of the buffer to receive the null-terminated string being retrieved.</param>
/// <param name="cchMax">Size of the buffer, in characters, to receive the null-terminated string.</param>
/// <returns>If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.</returns>