diff --git a/PInvoke/Shell32/ShObjIdl.IDeskBand.cs b/PInvoke/Shell32/ShObjIdl.IDeskBand.cs
new file mode 100644
index 00000000..eb491da2
--- /dev/null
+++ b/PInvoke/Shell32/ShObjIdl.IDeskBand.cs
@@ -0,0 +1,905 @@
+using System;
+using System.Drawing;
+using System.Runtime.InteropServices;
+
+namespace Vanara.PInvoke
+{
+ public static partial class Shell32
+ {
+ /// The view mode of the band object. This is one of the following values.
+ [PInvokeData("shobjidl_core.h", MSDNShortId = "NN:shobjidl_core.IDeskBand")]
+ [Flags]
+ public enum DBIF : uint
+ {
+ /// Band object is displayed in a horizontal band.
+ DBIF_VIEWMODE_NORMAL = 0x0000,
+
+ /// Band object is displayed in a vertical band.
+ DBIF_VIEWMODE_VERTICAL = 0x0001,
+
+ /// Band object is displayed in a floating band.
+ DBIF_VIEWMODE_FLOATING = 0x0002,
+
+ /// Band object is displayed in a transparent band.
+ DBIF_VIEWMODE_TRANSPARENT = 0x0004
+ }
+
+ ///
+ /// The set of flags that determine which members of this structure are being requested by the caller. One or more of the following values:
+ ///
+ [PInvokeData("shobjidl_core.h", MSDNShortId = "NS:shobjidl_core.DESKBANDINFO")]
+ [Flags]
+ public enum DBIM : uint
+ {
+ /// ptMinSize is requested.
+ DBIM_MINSIZE = 0x0001,
+
+ /// ptMaxSize is requested.
+ DBIM_MAXSIZE = 0x0002,
+
+ /// ptIntegral is requested.
+ DBIM_INTEGRAL = 0x0004,
+
+ /// ptActual is requested.
+ DBIM_ACTUAL = 0x0008,
+
+ /// wszTitle is requested.
+ DBIM_TITLE = 0x0010,
+
+ /// dwModeFlags is requested.
+ DBIM_MODEFLAGS = 0x0020,
+
+ /// crBkgnd is requested.
+ DBIM_BKCOLOR = 0x0040
+ }
+
+ ///
+ /// A value that receives a set of flags that specify the mode of operation for the band object. One or more of the following values:
+ ///
+ [PInvokeData("shobjidl_core.h", MSDNShortId = "NS:shobjidl_core.DESKBANDINFO")]
+ [Flags]
+ public enum DBIMF : uint
+ {
+ /// The band uses default properties. The other mode flags modify this flag.
+ DBIMF_NORMAL = 0x0000,
+
+ ///
+ /// Windows XP and later: The band object is of a fixed sized and position. With this flag, a sizing grip is not displayed on the
+ /// band object.
+ ///
+ DBIMF_FIXED = 0x0001,
+
+ ///
+ /// DBIMF_FIXEDBMP Windows XP and later: The band object uses a fixed bitmap (.bmp) file as its background. Note that backgrounds
+ /// are not supported in all cases, so the bitmap may not be seen even when this flag is set.
+ ///
+ DBIMF_FIXEDBMP = 0x0004,
+
+ ///
+ /// The height of the band object can be changed. The ptIntegral member defines the step value by which the band object can be resized.
+ ///
+ DBIMF_VARIABLEHEIGHT = 0x0008,
+
+ /// Windows XP and later: The band object cannot be removed from the band container.
+ DBIMF_UNDELETEABLE = 0x0010,
+
+ /// The band object is displayed with a sunken appearance.
+ DBIMF_DEBOSSED = 0x0020,
+
+ /// The band is displayed with the background color specified in crBkgnd.
+ DBIMF_BKCOLOR = 0x0040,
+
+ ///
+ /// Windows XP and later: If the full band object cannot be displayed (that is, the band object is smaller than ptActual, a chevron
+ /// is shown to indicate that there are more options available. These options are displayed when the chevron is clicked.
+ ///
+ DBIMF_USECHEVRON = 0x0080,
+
+ /// Windows XP and later: The band object is displayed in a new row in the band container.
+ DBIMF_BREAK = 0x0100,
+
+ /// Windows XP and later: The band object is the first object in the band container.
+ DBIMF_ADDTOFRONT = 0x0200,
+
+ /// Windows XP and later: The band object is displayed in the top row of the band container.
+ DBIMF_TOPALIGN = 0x0400,
+
+ /// Windows Vista and later: No sizing grip is ever displayed to allow the user to move or resize the band object.
+ DBIMF_NOGRIPPER = 0x0800,
+
+ ///
+ /// Windows Vista and later: A sizing grip that allows the user to move or resize the band object is always shown, even if that band
+ /// object is the only one in the container.
+ ///
+ DBIMF_ALWAYSGRIPPER = 0x1000,
+
+ /// Windows Vista and later: The band object should not display margins.
+ DBIMF_NOMARGINS = 0x2000
+ }
+
+ ///
+ /// Used to obtain information about a band object.
+ ///
+ /// Important You should use thumbnail toolbars in new development in place of desk bands, which are not supported as of Windows 7.
+ ///
+ ///
+ ///
+ /// This interface also provides the methods of the IOleWindow and IDockingWindow interfaces, from which it inherits.
+ /// When to Implement
+ /// Implement IDeskBand if you are implementing a band object.
+ /// When to Use
+ ///
+ /// You do not call this interface directly. IDeskBand is used by the Shell or the browser to obtain display information for a
+ /// band object.
+ ///
+ ///
+ // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nn-shobjidl_core-ideskband
+ [PInvokeData("shobjidl_core.h", MSDNShortId = "NN:shobjidl_core.IDeskBand")]
+ [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("EB0FE172-1A3A-11D0-89B3-00A0C90A90AC")]
+ public interface IDeskBand : IDockingWindow
+ {
+ ///
+ /// Retrieves a handle to one of the windows participating in in-place activation (frame, document, parent, or in-place object window).
+ ///
+ /// A pointer to a variable that receives the window handle.
+ ///
+ /// This method returns S_OK on success. Other possible return values include the following.
+ ///
+ ///
+ /// Return code
+ /// Description
+ ///
+ /// -
+ /// E_FAIL
+ /// The object is windowless.
+ ///
+ /// -
+ /// E_OUTOFMEMORY
+ /// There is insufficient memory available for this operation.
+ ///
+ /// -
+ /// E_UNEXPECTED
+ /// An unexpected error has occurred.
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// Five types of windows comprise the windows hierarchy. When a object is active in place, it has access to some or all of these windows.
+ ///
+ ///
+ ///
+ /// Window
+ /// Description
+ ///
+ /// -
+ /// Frame
+ /// The outermost main window where the container application's main menu resides.
+ ///
+ /// -
+ /// Document
+ /// The window that displays the compound document containing the embedded object to the user.
+ ///
+ /// -
+ /// Pane
+ ///
+ /// The subwindow of the document window that contains the object's view. Applicable only for applications with split-pane windows.
+ ///
+ ///
+ /// -
+ /// Parent
+ ///
+ /// The container window that contains that object's view. The object application installs its window as a child of this window.
+ ///
+ ///
+ /// -
+ /// In-place
+ ///
+ /// The window containing the active in-place object. The object application creates this window and installs it as a child of its
+ /// hatch window, which is a child of the container's parent window.
+ ///
+ ///
+ ///
+ ///
+ /// Each type of window has a different role in the in-place activation architecture. However, it is not necessary to employ a
+ /// separate physical window for each type. Many container applications use the same window for their frame, document, pane, and
+ /// parent windows.
+ ///
+ ///
+ [PreserveSig]
+ new HRESULT GetWindow(out HWND phwnd);
+
+ /// Determines whether context-sensitive help mode should be entered during an in-place activation session.
+ /// if help mode should be entered; if it should be exited.
+ ///
+ ///
+ /// This method returns S_OK if the help mode was entered or exited successfully, depending on the value passed in . Other possible return values include the following.
+ ///
+ ///
+ ///
+ /// Return code
+ /// Description
+ ///
+ /// -
+ /// E_INVALIDARG
+ /// The specified value is not valid.
+ ///
+ /// -
+ /// E_OUTOFMEMORY
+ /// There is insufficient memory available for this operation.
+ ///
+ /// -
+ /// E_UNEXPECTED
+ /// An unexpected error has occurred.
+ ///
+ ///
+ ///
+ ///
+ /// Applications can invoke context-sensitive help when the user:
+ ///
+ /// - presses SHIFT+F1, then clicks a topic
+ /// - presses F1 when a menu item is selected
+ ///
+ ///
+ /// When SHIFT+F1 is pressed, either the frame or active object can receive the keystrokes. If the container's frame receives the
+ /// keystrokes, it calls its containing document's IOleWindow::ContextSensitiveHelp method with set to
+ /// . This propagates the help state to all of its in-place objects so they can correctly handle the mouse
+ /// click or WM_COMMAND.
+ ///
+ ///
+ /// If an active object receives the SHIFT+F1 keystrokes, it calls the container's IOleWindow::ContextSensitiveHelp method with
+ /// set to , which then recursively calls each of its in-place sites until there
+ /// are no more to be notified. The container then calls its document's or frame's IOleWindow::ContextSensitiveHelp method with
+ /// set to .
+ ///
+ /// When in context-sensitive help mode, an object that receives the mouse click can either:
+ ///
+ /// - Ignore the click if it does not support context-sensitive help.
+ /// -
+ /// Tell all the other objects to exit context-sensitive help mode with ContextSensitiveHelp set to FALSE and then provide help for
+ /// that context.
+ ///
+ ///
+ ///
+ /// An object in context-sensitive help mode that receives a WM_COMMAND should tell all the other in-place objects to exit
+ /// context-sensitive help mode and then provide help for the command.
+ ///
+ ///
+ /// If a container application is to support context-sensitive help on menu items, it must either provide its own message filter so
+ /// that it can intercept the F1 key or ask the OLE library to add a message filter by calling OleSetMenuDescriptor, passing valid,
+ /// non-NULL values for the lpFrame and lpActiveObj parameters.
+ ///
+ ///
+ [PreserveSig]
+ new HRESULT ContextSensitiveHelp([MarshalAs(UnmanagedType.Bool)] bool fEnterMode);
+
+ /// Instructs the docking window object to show or hide itself.
+ ///
+ /// Type: BOOL
+ ///
+ /// TRUE if the docking window object should show its window. FALSE if the docking window object should hide its
+ /// window and return its border space by calling SetBorderSpaceDW with zero values.
+ ///
+ ///
+ ///
+ /// Type: HRESULT
+ /// If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
+ ///
+ // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-idockingwindow-showdw HRESULT ShowDW( BOOL
+ // fShow );
+ [PreserveSig]
+ new HRESULT ShowDW([MarshalAs(UnmanagedType.Bool)] bool fShow);
+
+ ///
+ /// Notifies the docking window object that it is about to be removed from the frame. The docking window object should save any
+ /// persistent information at this time.
+ ///
+ ///
+ /// Type: DWORD
+ /// Reserved. This parameter should always be zero.
+ ///
+ ///
+ /// Type: HRESULT
+ /// If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
+ ///
+ // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-idockingwindow-closedw HRESULT CloseDW( DWORD
+ // dwReserved );
+ [PreserveSig]
+ new HRESULT CloseDW(uint dwReserved);
+
+ ///
+ /// Notifies the docking window object that the frame's border space has changed. In response to this method, the IDockingWindow
+ /// implementation must call SetBorderSpaceDW, even if no border space is required or a change is not necessary.
+ ///
+ ///
+ /// Type: LPCRECT
+ /// Pointer to a RECT structure that contains the frame's available border space.
+ ///
+ ///
+ /// Type: IUnknown*
+ ///
+ /// Pointer to the site's IUnknown interface. The docking window object should call the QueryInterface method for this interface,
+ /// requesting IID_IDockingWindowSite. The docking window object then uses that interface to negotiate its border space. It is the
+ /// docking window object's responsibility to release this interface when it is no longer needed.
+ ///
+ ///
+ ///
+ /// Type: BOOL
+ /// Reserved. This parameter should always be zero.
+ ///
+ ///
+ /// Type: HRESULT
+ /// If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
+ ///
+ ///
+ ///
+ /// The prcBorder parameter contains the frame's entire available border space. The docking window object should negotiate its
+ /// border space and then use this information to position itself.
+ ///
+ ///
+ /// For example, if the docking window object requires 25 pixels at the top of the border space, it should negotiate for this
+ /// through the following steps:
+ ///
+ ///
+ /// -
+ /// Allocate a BORDERWIDTHS structure and set its top member to 25.
+ ///
+ /// -
+ /// Call RequestBorderSpaceDW to request the space.
+ ///
+ /// -
+ /// If the request is approved by RequestBorderSpaceDW, call SetBorderSpaceDW to allocate the space.
+ ///
+ ///
+ ///
+ /// The docking window object can then position its window at prcBorder->left and prcBorder->top. The width of the docking
+ /// window object's window is determined by subtracting prcBorder->left from prcBorder->right. Its height is contained in the
+ /// top member of the BORDERWIDTHS structure.
+ ///
+ ///
+ // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-idockingwindow-resizeborderdw HRESULT
+ // ResizeBorderDW( LPCRECT prcBorder, IUnknown *punkToolbarSite, BOOL fReserved );
+ [PreserveSig]
+ new HRESULT ResizeBorderDW([In, Optional] PRECT prcBorder, [In, Optional, MarshalAs(UnmanagedType.IUnknown)] object punkToolbarSite, [MarshalAs(UnmanagedType.Bool)] bool fReserved = false);
+
+ ///
+ /// Gets state information for a band object.
+ ///
+ /// Important You should use thumbnail toolbars in new development in place of desk bands, which are not supported as of
+ /// Windows 7.
+ ///
+ ///
+ ///
+ /// Type: DWORD
+ /// The identifier of the band, assigned by the container. The band object can retain this value if it is required.
+ ///
+ ///
+ /// Type: DWORD
+ /// The view mode of the band object. One of the following values:
+ /// DBIF_VIEWMODE_NORMAL
+ /// The band object is being displayed in a horizontal band.
+ /// DBIF_VIEWMODE_VERTICAL
+ /// The band object is being displayed in a vertical band.
+ /// DBIF_VIEWMODE_FLOATING
+ /// The band object is being displayed in a floating band.
+ /// DBIF_VIEWMODE_TRANSPARENT
+ /// The band object is being displayed in a transparent band.
+ ///
+ ///
+ /// Type: DESKBANDINFO*
+ ///
+ /// Pointer to a DESKBANDINFO structure that receives the band information for the object. The dwMask member of this
+ /// structure indicates the specific information that is being requested.
+ ///
+ ///
+ ///
+ /// Type: HRESULT
+ /// If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
+ ///
+ // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-ideskband-getbandinfo HRESULT GetBandInfo(
+ // DWORD dwBandID, DWORD dwViewMode, DESKBANDINFO *pdbi );
+ [PreserveSig]
+ HRESULT GetBandInfo(uint dwBandID, DBIF dwViewMode, ref DESKBANDINFO pdbi);
+ }
+
+ ///
+ /// Exposes methods to enable and query translucency effects in a deskband object.
+ ///
+ /// Important You should use thumbnail toolbars in new development in place of desk bands, which are not supported as of Windows 7.
+ ///
+ ///
+ ///
+ /// This interface also provides the methods of the IOleWindow, IDockingWindow, and IDeskBand interfaces, from which it inherits.
+ ///
+ /// If implemented in all active deskbands, this interface allows the taskbar to be displayed using translucent effects. If an active
+ /// deskband does not implement IDeskBand2, then translucency is disabled for the entire taskbar.
+ ///
+ /// A deskband can implement IDeskBand2 as a communication conduit between itself and the taskbar as follows:
+ ///
+ /// -
+ ///
+ /// Taskbar calls IDeskBand2::CanRenderComposited to learn if a deskband supports translucency. If one or more do not, the entire
+ /// taskbar is rendered opaque.
+ ///
+ ///
+ /// -
+ ///
+ /// Taskbar calls IDeskBand2::SetCompositionState as appropriate in response to a user turning translucent effects on or off. The
+ /// taskbar should attempt to render itself translucent or opaque in response to this call.
+ ///
+ ///
+ /// -
+ /// IDeskBand2::GetCompositionState is the counterpart of IDeskBand2::SetCompositionState.
+ ///
+ ///
+ ///
+ // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl/nn-shobjidl-ideskband2
+ [PInvokeData("shobjidl.h", MSDNShortId = "NN:shobjidl.IDeskBand2")]
+ [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("79D16DE4-ABEE-4021-8D9D-9169B261D657")]
+ public interface IDeskBand2 : IDeskBand
+ {
+ ///
+ /// Retrieves a handle to one of the windows participating in in-place activation (frame, document, parent, or in-place object window).
+ ///
+ /// A pointer to a variable that receives the window handle.
+ ///
+ /// This method returns S_OK on success. Other possible return values include the following.
+ ///
+ ///
+ /// Return code
+ /// Description
+ ///
+ /// -
+ /// E_FAIL
+ /// The object is windowless.
+ ///
+ /// -
+ /// E_OUTOFMEMORY
+ /// There is insufficient memory available for this operation.
+ ///
+ /// -
+ /// E_UNEXPECTED
+ /// An unexpected error has occurred.
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// Five types of windows comprise the windows hierarchy. When a object is active in place, it has access to some or all of these windows.
+ ///
+ ///
+ ///
+ /// Window
+ /// Description
+ ///
+ /// -
+ /// Frame
+ /// The outermost main window where the container application's main menu resides.
+ ///
+ /// -
+ /// Document
+ /// The window that displays the compound document containing the embedded object to the user.
+ ///
+ /// -
+ /// Pane
+ ///
+ /// The subwindow of the document window that contains the object's view. Applicable only for applications with split-pane windows.
+ ///
+ ///
+ /// -
+ /// Parent
+ ///
+ /// The container window that contains that object's view. The object application installs its window as a child of this window.
+ ///
+ ///
+ /// -
+ /// In-place
+ ///
+ /// The window containing the active in-place object. The object application creates this window and installs it as a child of its
+ /// hatch window, which is a child of the container's parent window.
+ ///
+ ///
+ ///
+ ///
+ /// Each type of window has a different role in the in-place activation architecture. However, it is not necessary to employ a
+ /// separate physical window for each type. Many container applications use the same window for their frame, document, pane, and
+ /// parent windows.
+ ///
+ ///
+ [PreserveSig]
+ new HRESULT GetWindow(out HWND phwnd);
+
+ /// Determines whether context-sensitive help mode should be entered during an in-place activation session.
+ /// if help mode should be entered; if it should be exited.
+ ///
+ ///
+ /// This method returns S_OK if the help mode was entered or exited successfully, depending on the value passed in . Other possible return values include the following.
+ ///
+ ///
+ ///
+ /// Return code
+ /// Description
+ ///
+ /// -
+ /// E_INVALIDARG
+ /// The specified value is not valid.
+ ///
+ /// -
+ /// E_OUTOFMEMORY
+ /// There is insufficient memory available for this operation.
+ ///
+ /// -
+ /// E_UNEXPECTED
+ /// An unexpected error has occurred.
+ ///
+ ///
+ ///
+ ///
+ /// Applications can invoke context-sensitive help when the user:
+ ///
+ /// - presses SHIFT+F1, then clicks a topic
+ /// - presses F1 when a menu item is selected
+ ///
+ ///
+ /// When SHIFT+F1 is pressed, either the frame or active object can receive the keystrokes. If the container's frame receives the
+ /// keystrokes, it calls its containing document's IOleWindow::ContextSensitiveHelp method with set to
+ /// . This propagates the help state to all of its in-place objects so they can correctly handle the mouse
+ /// click or WM_COMMAND.
+ ///
+ ///
+ /// If an active object receives the SHIFT+F1 keystrokes, it calls the container's IOleWindow::ContextSensitiveHelp method with
+ /// set to , which then recursively calls each of its in-place sites until there
+ /// are no more to be notified. The container then calls its document's or frame's IOleWindow::ContextSensitiveHelp method with
+ /// set to .
+ ///
+ /// When in context-sensitive help mode, an object that receives the mouse click can either:
+ ///
+ /// - Ignore the click if it does not support context-sensitive help.
+ /// -
+ /// Tell all the other objects to exit context-sensitive help mode with ContextSensitiveHelp set to FALSE and then provide help for
+ /// that context.
+ ///
+ ///
+ ///
+ /// An object in context-sensitive help mode that receives a WM_COMMAND should tell all the other in-place objects to exit
+ /// context-sensitive help mode and then provide help for the command.
+ ///
+ ///
+ /// If a container application is to support context-sensitive help on menu items, it must either provide its own message filter so
+ /// that it can intercept the F1 key or ask the OLE library to add a message filter by calling OleSetMenuDescriptor, passing valid,
+ /// non-NULL values for the lpFrame and lpActiveObj parameters.
+ ///
+ ///
+ [PreserveSig]
+ new HRESULT ContextSensitiveHelp([MarshalAs(UnmanagedType.Bool)] bool fEnterMode);
+
+ /// Instructs the docking window object to show or hide itself.
+ ///
+ /// Type: BOOL
+ ///
+ /// TRUE if the docking window object should show its window. FALSE if the docking window object should hide its
+ /// window and return its border space by calling SetBorderSpaceDW with zero values.
+ ///
+ ///
+ ///
+ /// Type: HRESULT
+ /// If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
+ ///
+ // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-idockingwindow-showdw HRESULT ShowDW( BOOL
+ // fShow );
+ [PreserveSig]
+ new HRESULT ShowDW([MarshalAs(UnmanagedType.Bool)] bool fShow);
+
+ ///
+ /// Notifies the docking window object that it is about to be removed from the frame. The docking window object should save any
+ /// persistent information at this time.
+ ///
+ ///
+ /// Type: DWORD
+ /// Reserved. This parameter should always be zero.
+ ///
+ ///
+ /// Type: HRESULT
+ /// If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
+ ///
+ // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-idockingwindow-closedw HRESULT CloseDW( DWORD
+ // dwReserved );
+ [PreserveSig]
+ new HRESULT CloseDW(uint dwReserved);
+
+ ///
+ /// Notifies the docking window object that the frame's border space has changed. In response to this method, the IDockingWindow
+ /// implementation must call SetBorderSpaceDW, even if no border space is required or a change is not necessary.
+ ///
+ ///
+ /// Type: LPCRECT
+ /// Pointer to a RECT structure that contains the frame's available border space.
+ ///
+ ///
+ /// Type: IUnknown*
+ ///
+ /// Pointer to the site's IUnknown interface. The docking window object should call the QueryInterface method for this interface,
+ /// requesting IID_IDockingWindowSite. The docking window object then uses that interface to negotiate its border space. It is the
+ /// docking window object's responsibility to release this interface when it is no longer needed.
+ ///
+ ///
+ ///
+ /// Type: BOOL
+ /// Reserved. This parameter should always be zero.
+ ///
+ ///
+ /// Type: HRESULT
+ /// If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
+ ///
+ ///
+ ///
+ /// The prcBorder parameter contains the frame's entire available border space. The docking window object should negotiate its
+ /// border space and then use this information to position itself.
+ ///
+ ///
+ /// For example, if the docking window object requires 25 pixels at the top of the border space, it should negotiate for this
+ /// through the following steps:
+ ///
+ ///
+ /// -
+ /// Allocate a BORDERWIDTHS structure and set its top member to 25.
+ ///
+ /// -
+ /// Call RequestBorderSpaceDW to request the space.
+ ///
+ /// -
+ /// If the request is approved by RequestBorderSpaceDW, call SetBorderSpaceDW to allocate the space.
+ ///
+ ///
+ ///
+ /// The docking window object can then position its window at prcBorder->left and prcBorder->top. The width of the docking
+ /// window object's window is determined by subtracting prcBorder->left from prcBorder->right. Its height is contained in the
+ /// top member of the BORDERWIDTHS structure.
+ ///
+ ///
+ // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-idockingwindow-resizeborderdw HRESULT
+ // ResizeBorderDW( LPCRECT prcBorder, IUnknown *punkToolbarSite, BOOL fReserved );
+ [PreserveSig]
+ new HRESULT ResizeBorderDW([In, Optional] PRECT prcBorder, [In, Optional, MarshalAs(UnmanagedType.IUnknown)] object punkToolbarSite, [MarshalAs(UnmanagedType.Bool)] bool fReserved = false);
+
+ ///
+ /// Gets state information for a band object.
+ ///
+ /// Important You should use thumbnail toolbars in new development in place of desk bands, which are not supported as of
+ /// Windows 7.
+ ///
+ ///
+ ///
+ /// Type: DWORD
+ /// The identifier of the band, assigned by the container. The band object can retain this value if it is required.
+ ///
+ ///
+ /// Type: DWORD
+ /// The view mode of the band object. One of the following values:
+ /// DBIF_VIEWMODE_NORMAL
+ /// The band object is being displayed in a horizontal band.
+ /// DBIF_VIEWMODE_VERTICAL
+ /// The band object is being displayed in a vertical band.
+ /// DBIF_VIEWMODE_FLOATING
+ /// The band object is being displayed in a floating band.
+ /// DBIF_VIEWMODE_TRANSPARENT
+ /// The band object is being displayed in a transparent band.
+ ///
+ ///
+ /// Type: DESKBANDINFO*
+ ///
+ /// Pointer to a DESKBANDINFO structure that receives the band information for the object. The dwMask member of this
+ /// structure indicates the specific information that is being requested.
+ ///
+ ///
+ ///
+ /// Type: HRESULT
+ /// If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
+ ///
+ // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-ideskband-getbandinfo HRESULT GetBandInfo(
+ // DWORD dwBandID, DWORD dwViewMode, DESKBANDINFO *pdbi );
+ [PreserveSig]
+ new HRESULT GetBandInfo(uint dwBandID, DBIF dwViewMode, ref DESKBANDINFO pdbi);
+
+ ///
+ /// Indicates the deskband's ability to be displayed as translucent.
+ ///
+ /// Important You should use thumbnail toolbars in new development in place of desk bands, which are not supported as of
+ /// Windows 7.
+ ///
+ ///
+ ///
+ /// Type: BOOL*
+ /// When this method returns, contains a BOOL indicating ability.
+ ///
+ ///
+ /// Type: HRESULT
+ /// If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
+ ///
+ // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl/nf-shobjidl-ideskband2-canrendercomposited HRESULT
+ // CanRenderComposited( BOOL *pfCanRenderComposited );
+ [PreserveSig]
+ HRESULT CanRenderComposited([MarshalAs(UnmanagedType.Bool)] out bool pfCanRenderComposited);
+
+ ///
+ /// Sets the composition state.
+ ///
+ /// Important You should use thumbnail toolbars in new development in place of desk bands, which are not supported as of
+ /// Windows 7.
+ ///
+ ///
+ ///
+ /// Type: BOOL
+ /// TRUE to enable the composition state; otherwise, FALSE.
+ ///
+ ///
+ /// Type: HRESULT
+ /// If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
+ ///
+ // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl/nf-shobjidl-ideskband2-setcompositionstate HRESULT
+ // SetCompositionState( BOOL fCompositionEnabled );
+ [PreserveSig]
+ HRESULT SetCompositionState([MarshalAs(UnmanagedType.Bool)] bool fCompositionEnabled);
+
+ ///
+ /// Gets the composition state.
+ ///
+ /// Important You should use thumbnail toolbars in new development in place of desk bands, which are not supported as of
+ /// Windows 7.
+ ///
+ ///
+ ///
+ /// Type: BOOL*
+ /// When this method returns, contains a BOOL that indicates state.
+ ///
+ ///
+ /// Type: HRESULT
+ /// If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
+ ///
+ // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl/nf-shobjidl-ideskband2-getcompositionstate HRESULT
+ // GetCompositionState( BOOL *pfCompositionEnabled );
+ [PreserveSig]
+ HRESULT GetCompositionState([MarshalAs(UnmanagedType.Bool)] out bool pfCompositionEnabled);
+ }
+
+ /// Receives information about a band object. This structure is used with the deprecated IDeskBand::GetBandInfo method.
+ // https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/ns-shobjidl_core-deskbandinfo typedef struct DESKBANDINFO { DWORD
+ // dwMask; POINTL ptMinSize; POINTL ptMaxSize; POINTL ptIntegral; POINTL ptActual; WCHAR wszTitle[256]; DWORD dwModeFlags; COLORREF
+ // crBkgnd; } DESKBANDINFO;
+ [PInvokeData("shobjidl_core.h", MSDNShortId = "NS:shobjidl_core.DESKBANDINFO")]
+ [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
+ public struct DESKBANDINFO
+ {
+ ///
+ /// Type: DWORD
+ ///
+ /// The set of flags that determine which members of this structure are being requested by the caller. One or more of the following values:
+ ///
+ /// DBIM_MINSIZE
+ /// ptMinSize is requested.
+ /// DBIM_MAXSIZE
+ /// ptMaxSize is requested.
+ /// DBIM_INTEGRAL
+ /// ptIntegral is requested.
+ /// DBIM_ACTUAL
+ /// ptActual is requested.
+ /// DBIM_TITLE
+ /// wszTitle is requested.
+ /// DBIM_MODEFLAGS
+ /// dwModeFlags is requested.
+ /// DBIM_BKCOLOR
+ /// crBkgnd is requested.
+ ///
+ public DBIM dwMask;
+
+ ///
+ /// Type: POINTL
+ ///
+ /// A POINTL structure that receives the minimum size of the band object. The minimum width is given in the POINTL
+ /// structure's x member and the minimum height is given in the y member.
+ ///
+ ///
+ public Size ptMinSize;
+
+ ///
+ /// Type: POINTL
+ ///
+ /// A POINTL structure that receives the maximum size of the band object. The maximum height is given in the POINTL
+ /// structure's y member and the x member is ignored. If the band object has no limit for its maximum height, (LONG)-1
+ /// should be used.
+ ///
+ ///
+ public Size ptMaxSize;
+
+ ///
+ /// Type: POINTL
+ ///
+ /// A POINTL structure that receives the sizing step value (increment) in which the band object is resized. The vertical step value
+ /// is given in the POINTL structure's y member and the x member is ignored.
+ ///
+ /// The dwModeFlags member must contain the DBIMF_VARIABLEHEIGHT flag; otherwise, ptIntegral is ignored.
+ ///
+ public Size ptIntegral;
+
+ ///
+ /// Type: POINTL
+ ///
+ /// A POINTL structure that receives the ideal size of the band object. The ideal width is given in the POINTL structure's
+ /// x member and the ideal height is given in the y member. The band container attempts to use these values, but the
+ /// band is not guaranteed to be this size.
+ ///
+ ///
+ public Size ptActual;
+
+ ///
+ /// Type: WCHAR[256]
+ /// A WCHAR buffer that receives the title of the band.
+ ///
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
+ public string wszTitle;
+
+ ///
+ /// Type: DWORD
+ ///
+ /// A value that receives a set of flags that specify the mode of operation for the band object. One or more of the following values:
+ ///
+ /// DBIMF_NORMAL
+ /// The band uses default properties. The other mode flags modify this flag.
+ /// DBIMF_FIXED
+ ///
+ /// Windows XP and later: The band object is of a fixed sized and position. With this flag, a sizing grip is not displayed on
+ /// the band object.
+ ///
+ /// DBIMF_FIXEDBMP
+ ///
+ /// Windows XP and later: The band object uses a fixed bitmap (.bmp) file as its background. Note that backgrounds are not
+ /// supported in all cases, so the bitmap may not be seen even when this flag is set.
+ ///
+ /// DBIMF_VARIABLEHEIGHT
+ ///
+ /// The height of the band object can be changed. The ptIntegral member defines the step value by which the band object can
+ /// be resized.
+ ///
+ /// DBIMF_UNDELETEABLE
+ /// Windows XP and later: The band object cannot be removed from the band container.
+ /// DBIMF_DEBOSSED
+ /// The band object is displayed with a sunken appearance.
+ /// DBIMF_BKCOLOR
+ /// The band is displayed with the background color specified in crBkgnd.
+ /// DBIMF_USECHEVRON
+ ///
+ /// Windows XP and later: If the full band object cannot be displayed (that is, the band object is smaller than
+ /// ptActual, a chevron is shown to indicate that there are more options available. These options are displayed when the
+ /// chevron is clicked.
+ ///
+ /// DBIMF_BREAK
+ /// Windows XP and later: The band object is displayed in a new row in the band container.
+ /// DBIMF_ADDTOFRONT
+ /// Windows XP and later: The band object is the first object in the band container.
+ /// DBIMF_TOPALIGN
+ /// Windows XP and later: The band object is displayed in the top row of the band container.
+ /// DBIMF_NOGRIPPER
+ /// Windows Vista and later: No sizing grip is ever displayed to allow the user to move or resize the band object.
+ /// DBIMF_ALWAYSGRIPPER
+ ///
+ /// Windows Vista and later: A sizing grip that allows the user to move or resize the band object is always shown, even if
+ /// that band object is the only one in the container.
+ ///
+ /// DBIMF_NOMARGINS
+ /// Windows Vista and later: The band object should not display margins.
+ ///
+ public DBIMF dwModeFlags;
+
+ ///
+ /// Type: COLORREF
+ ///
+ /// A COLORREF structure that receives the background color of the band. The dwModeFlags member must contain the
+ /// DBIMF_BKCOLOR flag; otherwise, crBkgnd is ignored.
+ ///
+ ///
+ public COLORREF crBkgnd;
+ }
+ }
+}
\ No newline at end of file