/// <summary>Flag options for the IContextMenu interface.</summary>
[Flags]
publicenumCMF:uint
{
/// <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>
[Flags]
publicenumCMIC:uint
{
/// <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>
publicenumGCS:uint
{
/// <summary>Sets pszName to an ANSI string containing the language-independent command name for the menu item.</summary>
GCS_VERBA=0x00000000,
/// <summary>Sets pszName to an ANSI string containing the help text for the command.</summary>
GCS_HELPTEXTA=0x00000001,
/// <summary>Returns S_OK if the menu item exists, or S_FALSE otherwise.</summary>
GCS_VALIDATEA=0x00000002,
/// <summary>Sets pszName to a Unicode string containing the language-independent command name for the menu item.</summary>
GCS_VERBW=0x00000004,
/// <summary>Sets pszName to a Unicode string containing the help text for the command.</summary>
GCS_HELPTEXTW=0x00000005,
/// <summary>Returns S_OK if the menu item exists, or S_FALSE otherwise.</summary>
GCS_VALIDATEW=0x00000006,
/// <summary>Sets pszName to a Unicode string containing the icon string for the command.</summary>
GCS_VERBICONW=0x00000014,
/// <summary>For Unicode bit testing.</summary>
GCS_UNICODE=0x00000004,
}
/// <summary>
/// Exposes methods that either create or merge a shortcut menu associated with a Shell object. Allows client objects to handle messages associated with
/// owner-drawn menu items and extends IContextMenu2 by accepting a return value from that message handling.
/// <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>
/// Exposes methods that either create or merge a shortcut menu associated with a Shell object. Allows client objects to handle messages associated with
/// owner-drawn menu items and extends IContextMenu2 by accepting a return value from that message handling.
/// <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>