/// <summary>Windows 7 and later. The calling application is checking for the existence of child items in the folder.</summary>
SHCONTF_CHECKING_FOR_CHILDREN=0x00010,
/// <summary>Include items that are folders in the enumeration.</summary>
SHCONTF_FOLDERS=0x00020,
/// <summary>Include items that are not folders in the enumeration.</summary>
SHCONTF_NONFOLDERS=0x00040,
/// <summary>Include hidden items in the enumeration. This does not include hidden system items. (To include hidden system items, use SHCONTF_INCLUDESUPERHIDDEN.)</summary>
SHCONTF_INCLUDEHIDDEN=0x00080,
/// <summary>
/// No longer used; always assumed. IShellFolder::EnumObjects can return without validating the enumeration object. Validation can be postponed until
/// the first call to IEnumIDList::Next. Use this flag when a user interface might be displayed prior to the first IEnumIDList::Next call. For a user
/// interface to be presented, hwnd must be set to a valid window handle.
/// </summary>
SHCONTF_INIT_ON_FIRST_NEXT=0x00100,
/// <summary>The calling application is looking for printer objects.</summary>
SHCONTF_NETPRINTERSRCH=0x00200,
/// <summary>The calling application is looking for resources that can be shared.</summary>
SHCONTF_SHAREABLE=0x00400,
/// <summary>Include items with accessible storage and their ancestors, including hidden items.</summary>
SHCONTF_STORAGE=0x00800,
/// <summary>Windows 7 and later. Child folders should provide a navigation enumeration.</summary>
SHCONTF_NAVIGATION_ENUM=0x01000,
/// <summary>Windows Vista and later. The calling application is looking for resources that can be enumerated quickly.</summary>
SHCONTF_FASTITEMS=0x02000,
/// <summary>Windows Vista and later. Enumerate items as a simple list even if the folder itself is not structured in that way.</summary>
SHCONTF_FLATLIST=0x04000,
/// <summary>
/// Windows Vista and later. The calling application is monitoring for change notifications. This means that the enumerator does not have to return
/// all results. Items can be reported through change notifications.
/// </summary>
SHCONTF_ENABLE_ASYNC=0x08000,
/// <summary>
/// Windows 7 and later. Include hidden system items in the enumeration. This value does not include hidden non-system items. (To include hidden
/// non-system items, use SHCONTF_INCLUDEHIDDEN.)
/// </summary>
SHCONTF_INCLUDESUPERHIDDEN=0x10000
}
/// <summary>
/// Defines the values used with the IShellFolder::GetDisplayNameOf and IShellFolder::SetNameOf methods to specify the type of file or folder names used
/// <summary>Used to request information on one or more search objects.</summary>
/// <param name="celt">The number of search objects to be enumerated, starting from the current object. If celt is too large, the method should stop and return the actual number of search objects in pceltFetched.</param>
/// <param name="rgelt">A pointer to an array of pceltFetched EXTRASEARCH structures containing information on the enumerated objects.</param>
/// <param name="pceltFetched">The number of objects actually enumerated. This may be less than celt.</param>
/// <returns>Returns S_OK if successful, or a COM-defined error code otherwise.</returns>
/// <summary>Translates the display name of a file object or a folder into an item identifier list.</summary>
/// <param name="hwnd">
/// A window handle. The client should provide a window handle if it displays a dialog or message box. Otherwise set hwnd to NULL
/// </param>
/// <param name="pbc">
/// Optional. A pointer to a bind context used to pass parameters as inputs and outputs to the parsing function. These passed parameters are often
/// specific to the data source and are documented by the data source owners. For example, the file system data source accepts the name being parsed
/// (as a WIN32_FIND_DATA structure), using the STR_FILE_SYS_BIND_DATA bind context parameter. STR_PARSE_PREFER_FOLDER_BROWSING can be passed to
/// indicate that URLs are parsed using the file system data source when possible. Construct a bind context object using CreateBindCtx and populate
/// the values using IBindCtx::RegisterObjectParam. See Bind Context String Keys for a complete list of these. If no data is being passed to or
/// received from the parsing function, this value can be NULL.
/// </param>
/// <param name="pszDisplayName">
/// A null-terminated Unicode string with the display name. Because each Shell folder defines its own parsing syntax, the form this string can take
/// may vary. The desktop folder, for instance, accepts paths such as "C:\My Docs\My File.txt". It also will accept references to items in the
/// namespace that have a GUID associated with them using the "::{GUID}" syntax.
/// </param>
/// <param name="pchEaten">
/// A pointer to a ULONG value that receives the number of characters of the display name that was parsed. If your application does not need this
/// information, set pchEaten to NULL, and no value will be returned.
/// </param>
/// <param name="ppidl">
/// When this method returns, contains a pointer to the PIDL for the object. The returned item identifier list specifies the item relative to the
/// parsing folder. If the object associated with pszDisplayName is within the parsing folder, the returned item identifier list will contain only
/// one SHITEMID structure. If the object is in a subfolder of the parsing folder, the returned item identifier list will contain multiple SHITEMID
/// structures. If an error occurs, NULL is returned in this address.
/// <para>When it is no longer needed, it is the responsibility of the caller to free this resource by calling CoTaskMemFree.</para>
/// </param>
/// <param name="pdwAttributes">
/// The value used to query for file attributes. If not used, it should be set to NULL. To query for one or more attributes, initialize this
/// parameter with the SFGAO flags that represent the attributes of interest. On return, those attributes that are true and were requested will be set.
/// Retrieves a handler, typically the Shell folder object that implements IShellFolder for a particular item. Optional parameters that control the
/// construction of the handler are passed in the bind context.
/// </summary>
/// <param name="pidl">
/// The address of an ITEMIDLIST structure (PIDL) that identifies the subfolder. This value can refer to an item at any level below the parent folder
/// in the namespace hierarchy. The structure contains one or more SHITEMID structures, followed by a terminating NULL.
/// </param>
/// <param name="pbc">
/// A pointer to an IBindCtx interface on a bind context object that can be used to pass parameters to the construction of the handler. If this
/// parameter is not used, set it to NULL. Because support for this parameter is optional for folder object implementations, some folders may not
/// support the use of bind contexts.
/// <para>
/// Information that can be provided in the bind context includes a BIND_OPTS structure that includes a grfMode member that indicates the access mode
/// when binding to a stream handler. Other parameters can be set and discovered using IBindCtx::RegisterObjectParam and IBindCtx::GetObjectParam.
/// </para>
/// </param>
/// <param name="riid">
/// The identifier of the interface to return. This may be IID_IShellFolder, IID_IStream, or any other interface that identifies a particular handler.
/// </param>
/// <returns>
/// When this method returns, contains the address of a pointer to the requested interface. If an error occurs, a NULL pointer is returned at this address.
/// <summary>Requests a pointer to an object's storage interface.</summary>
/// <param name="pidl">
/// The address of an ITEMIDLIST structure that identifies the subfolder relative to its parent folder. The structure must contain exactly one
/// SHITEMID structure followed by a terminating zero.
/// </param>
/// <param name="pbc">
/// The optional address of an IBindCtx interface on a bind context object to be used during this operation. If this parameter is not used, set it to
/// NULL. Because support for pbc is optional for folder object implementations, some folders may not support the use of bind contexts.
/// </param>
/// <param name="riid">
/// The IID of the requested storage interface. To retrieve an IStream, IStorage, or IPropertySetStorage interface pointer, set riid to IID_IStream,
/// IID_IStorage, or IID_IPropertySetStorage, respectively.
/// </param>
/// <returns>The address that receives the interface pointer specified by riid. If an error occurs, a NULL pointer is returned in this address.</returns>
/// <summary>Requests an object that can be used to obtain information from or interact with a folder object.</summary>
/// <param name="hwndOwner">
/// A handle to the owner window. If you have implemented a custom folder view object, your folder view window should be created as a child of hwndOwner.
/// </param>
/// <param name="riid">A reference to the IID of the interface to retrieve through ppv, typically IID_IShellView.</param>
/// <returns>
/// When this method returns successfully, contains the interface pointer requested in riid. This is typically IShellView. See the Remarks section
/// <summary>Retrieves the display name for the specified file object or subfolder.</summary>
/// <param name="pidl">PIDL that uniquely identifies the file object or subfolder relative to the parent folder.</param>
/// <param name="uFlags">Flags used to request the type of display name to return. For a list of possible values, see the SHGDNF enumerated type.</param>
/// <returns>
/// When this method returns, contains a pointer to a STRRET structure in which to return the display name. The type of name returned in this
/// structure can be the requested type, but the Shell folder might return a different type.
/// <summary>Sets the display name of a file object or subfolder, changing the item identifier in the process.</summary>
/// <param name="hwnd">A handle to the owner window of any dialog or message box that the client displays.</param>
/// <param name="pidl">
/// A pointer to an ITEMIDLIST structure that uniquely identifies the file object or subfolder relative to the parent folder. The structure must
/// contain exactly one SHITEMID structure followed by a terminating zero.
/// </param>
/// <param name="pszName">A pointer to a null-terminated string that specifies the new display name.</param>
/// <param name="uFlags">
/// Flags that indicate the type of name specified by the pszName parameter. For a list of possible values and combinations of values, see SHGDNF.
/// </param>
/// <param name="ppidlOut">
/// Optional. If specified, the address of a pointer to an ITEMIDLIST structure that receives the ITEMIDLIST of the renamed item. The caller requests
/// this value by passing a non-null ppidlOut. Implementations of IShellFolder::SetNameOf must return a pointer to the new ITEMIDLIST in the ppidlOut parameter.
/// <summary>Translates the display name of a file object or a folder into an item identifier list.</summary>
/// <param name="hwnd">
/// A window handle. The client should provide a window handle if it displays a dialog or message box. Otherwise set hwnd to NULL
/// </param>
/// <param name="pbc">
/// Optional. A pointer to a bind context used to pass parameters as inputs and outputs to the parsing function. These passed parameters are often
/// specific to the data source and are documented by the data source owners. For example, the file system data source accepts the name being parsed
/// (as a WIN32_FIND_DATA structure), using the STR_FILE_SYS_BIND_DATA bind context parameter. STR_PARSE_PREFER_FOLDER_BROWSING can be passed to
/// indicate that URLs are parsed using the file system data source when possible. Construct a bind context object using CreateBindCtx and populate
/// the values using IBindCtx::RegisterObjectParam. See Bind Context String Keys for a complete list of these. If no data is being passed to or
/// received from the parsing function, this value can be NULL.
/// </param>
/// <param name="pszDisplayName">
/// A null-terminated Unicode string with the display name. Because each Shell folder defines its own parsing syntax, the form this string can take
/// may vary. The desktop folder, for instance, accepts paths such as "C:\My Docs\My File.txt". It also will accept references to items in the
/// namespace that have a GUID associated with them using the "::{GUID}" syntax.
/// </param>
/// <param name="pchEaten">
/// A pointer to a ULONG value that receives the number of characters of the display name that was parsed. If your application does not need this
/// information, set pchEaten to NULL, and no value will be returned.
/// </param>
/// <param name="ppidl">
/// When this method returns, contains a pointer to the PIDL for the object. The returned item identifier list specifies the item relative to the
/// parsing folder. If the object associated with pszDisplayName is within the parsing folder, the returned item identifier list will contain only
/// one SHITEMID structure. If the object is in a subfolder of the parsing folder, the returned item identifier list will contain multiple SHITEMID
/// structures. If an error occurs, NULL is returned in this address.
/// <para>When it is no longer needed, it is the responsibility of the caller to free this resource by calling CoTaskMemFree.</para>
/// </param>
/// <param name="pdwAttributes">
/// The value used to query for file attributes. If not used, it should be set to NULL. To query for one or more attributes, initialize this
/// parameter with the SFGAO flags that represent the attributes of interest. On return, those attributes that are true and were requested will be set.
/// Retrieves a handler, typically the Shell folder object that implements IShellFolder for a particular item. Optional parameters that control the
/// construction of the handler are passed in the bind context.
/// </summary>
/// <param name="pidl">
/// The address of an ITEMIDLIST structure (PIDL) that identifies the subfolder. This value can refer to an item at any level below the parent folder
/// in the namespace hierarchy. The structure contains one or more SHITEMID structures, followed by a terminating NULL.
/// </param>
/// <param name="pbc">
/// A pointer to an IBindCtx interface on a bind context object that can be used to pass parameters to the construction of the handler. If this
/// parameter is not used, set it to NULL. Because support for this parameter is optional for folder object implementations, some folders may not
/// support the use of bind contexts.
/// <para>
/// Information that can be provided in the bind context includes a BIND_OPTS structure that includes a grfMode member that indicates the access mode
/// when binding to a stream handler. Other parameters can be set and discovered using IBindCtx::RegisterObjectParam and IBindCtx::GetObjectParam.
/// </para>
/// </param>
/// <param name="riid">
/// The identifier of the interface to return. This may be IID_IShellFolder, IID_IStream, or any other interface that identifies a particular handler.
/// </param>
/// <returns>
/// When this method returns, contains the address of a pointer to the requested interface. If an error occurs, a NULL pointer is returned at this address.
/// <summary>Requests a pointer to an object's storage interface.</summary>
/// <param name="pidl">
/// The address of an ITEMIDLIST structure that identifies the subfolder relative to its parent folder. The structure must contain exactly one
/// SHITEMID structure followed by a terminating zero.
/// </param>
/// <param name="pbc">
/// The optional address of an IBindCtx interface on a bind context object to be used during this operation. If this parameter is not used, set it to
/// NULL. Because support for pbc is optional for folder object implementations, some folders may not support the use of bind contexts.
/// </param>
/// <param name="riid">
/// The IID of the requested storage interface. To retrieve an IStream, IStorage, or IPropertySetStorage interface pointer, set riid to IID_IStream,
/// IID_IStorage, or IID_IPropertySetStorage, respectively.
/// </param>
/// <returns>The address that receives the interface pointer specified by riid. If an error occurs, a NULL pointer is returned in this address.</returns>
/// <summary>Requests an object that can be used to obtain information from or interact with a folder object.</summary>
/// <param name="hwndOwner">
/// A handle to the owner window. If you have implemented a custom folder view object, your folder view window should be created as a child of hwndOwner.
/// </param>
/// <param name="riid">A reference to the IID of the interface to retrieve through ppv, typically IID_IShellView.</param>
/// <returns>
/// When this method returns successfully, contains the interface pointer requested in riid. This is typically IShellView. See the Remarks section
/// <summary>Retrieves the display name for the specified file object or subfolder.</summary>
/// <param name="pidl">PIDL that uniquely identifies the file object or subfolder relative to the parent folder.</param>
/// <param name="uFlags">Flags used to request the type of display name to return. For a list of possible values, see the SHGDNF enumerated type.</param>
/// <returns>
/// When this method returns, contains a pointer to a STRRET structure in which to return the display name. The type of name returned in this
/// structure can be the requested type, but the Shell folder might return a different type.
/// <summary>Sets the display name of a file object or subfolder, changing the item identifier in the process.</summary>
/// <param name="hwnd">A handle to the owner window of any dialog or message box that the client displays.</param>
/// <param name="pidl">
/// A pointer to an ITEMIDLIST structure that uniquely identifies the file object or subfolder relative to the parent folder. The structure must
/// contain exactly one SHITEMID structure followed by a terminating zero.
/// </param>
/// <param name="pszName">A pointer to a null-terminated string that specifies the new display name.</param>
/// <param name="uFlags">
/// Flags that indicate the type of name specified by the pszName parameter. For a list of possible values and combinations of values, see SHGDNF.
/// </param>
/// <param name="ppidlOut">
/// Optional. If specified, the address of a pointer to an ITEMIDLIST structure that receives the ITEMIDLIST of the renamed item. The caller requests
/// this value by passing a non-null ppidlOut. Implementations of IShellFolder::SetNameOf must return a pointer to the new ITEMIDLIST in the ppidlOut parameter.
/// <summary>Gets the default state for a specified column.</summary>
/// <param name="iColumn">An integer that specifies the column number.</param>
/// <returns>
/// A pointer to a value that contains flags that indicate the default column state. This parameter can include a combination of the following flags.
/// </returns>
SHCOLSTATEGetDefaultColumnState(uintiColumn);
/// <summary>
/// Gets detailed information, identified by a property set identifier (FMTID) and a property identifier (PID), on an item in a Shell folder.
/// </summary>
/// <param name="pidl">
/// A PIDL of the item, relative to the parent folder. This method accepts only single-level PIDLs. The structure must contain exactly one SHITEMID
/// structure followed by a terminating zero. This value cannot be NULL.
/// </param>
/// <param name="pscid">A pointer to an SHCOLUMNID structure that identifies the column.</param>
/// <returns>
/// A pointer to a VARIANT with the requested information. The value is fully typed. The value returned for properties from the property system must
/// conform to the type specified in that property definition's typeInfo as the legacyType attribute.
/// </returns>
objectGetDetailsEx(PIDLpidl,PROPERTYKEYpscid);
/// <summary>Gets detailed information, identified by a column index, on an item in a Shell folder.</summary>
/// <param name="pidl">
/// PIDL of the item for which you are requesting information. This method accepts only single-level PIDLs. The structure must contain exactly one
/// SHITEMID structure followed by a terminating zero. If this parameter is set to NULL, the title of the information field specified by iColumn is returned.
/// </param>
/// <param name="iColumn">
/// The zero-based index of the desired information field. It is identical to the column number of the information as it is displayed in a Windows
/// Explorer Details view.
/// </param>
/// <returns>
/// The zero-based index of the desired information field. It is identical to the column number of the information as it is displayed in a Windows
/// Explorer Details view.
/// </returns>
SHELLDETAILSGetDetailsOf(PIDLpidl,uintiColumn);
/// <summary>Converts a column to the appropriate property set ID (FMTID) and property ID (PID).</summary>
/// <param name="iColumn">The column ID.</param>
/// <returns>A pointer to an SHCOLUMNID structure containing the FMTID and PID.</returns>
/// <summary>A Unicode string containing the search object's friendly name. It will be used to identify the search engine on the Search Assistant menu.</summary>