using System;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using static Vanara.PInvoke.Kernel32;
using static Vanara.PInvoke.Ole32;
using FILETIME = System.Runtime.InteropServices.ComTypes.FILETIME;
namespace Vanara.PInvoke
{
/// Functions, interfaces and structures from Windows OleDlg.dll.
public static partial class OleDlg
{
private const string Lib_OleDlg = "oledlg.dll";
/// A hook function that processes messages intended for the dialog box.
/// The windows handle of the dialog.
/// The message.
///
///
///
/// The hook function must return zero to pass a message that it didn't process back to the dialog box procedure in the library. The
/// hook function must return a nonzero value to prevent the library's dialog box procedure from processing a message it has already processed.
///
[UnmanagedFunctionPointer(CallingConvention.Winapi)]
public delegate uint LPFNOLEUIHOOK(HWND hwnd, uint msg, IntPtr wParam, IntPtr lParam);
/// Initialization and creation flags for .
[PInvokeData("oledlg.h", MSDNShortId = "NS:oledlg.tagOLEUIBUSYA")]
[Flags]
public enum BZ
{
/// This flag disables the Cancel button.
BZ_DISABLECANCELBUTTON = 0x00000001,
/// Input only. This flag disables the Switch To... button.
BZ_DISABLESWITCHTOBUTTON = 0x00000002,
/// Input only. This flag disables the Retry button.
BZ_DISABLERETRYBUTTON = 0x00000004,
///
/// Input only. This flag generates a Not Responding dialog box instead of a Busy dialog box. The text is slightly different,
/// and the Cancel button is disabled.
///
BZ_NOTRESPONDINGDIALOG = 0x00000008,
}
/// On input, this field specifies the initialization and creation flags. On exit, it specifies the user's choices.
[PInvokeData("oledlg.h", MSDNShortId = "NS:oledlg.tagOLEUICONVERTA")]
[Flags]
public enum CF
{
/// Dialog box will display a Help button. This flag is set on input.
CF_SHOWHELPBUTTON = 0x0001,
///
/// Class whose CLSID is specified by clsidConvertDefault will be used as the default selection. This selection appears in the
/// class listbox when the Convert To radio button is selected. This flag is set on input.
///
CF_SETCONVERTDEFAULT = 0x0002,
///
/// Class whose CLSID is specified by clsidActivateDefault will be used as the default selection. This selection appears in the
/// class listbox when the Activate As radio button is selected. This flag is set on input.
///
CF_SETACTIVATEDEFAULT = 0x0004,
///
/// On input, this flag specifies that Convert To will be initially selected (default behavior). This flag is set on output if
/// Convert To was selected when the user dismissed the dialog box.
///
CF_SELECTCONVERTTO = 0x0008,
///
/// On input, this flag specifies that Activate As will be initially selected. This flag is set on output if Activate As was
/// selected when the user dismissed the dialog box.
///
CF_SELECTACTIVATEAS = 0x0010,
/// The Display As Icon button will be disabled on initialization.
CF_DISABLEDISPLAYASICON = 0x0020,
/// The Activate As radio button will be disabled on initialization.
CF_DISABLEACTIVATEAS = 0x0040,
/// The Change Icon button will be hidden in the Convert dialog box.
CF_HIDECHANGEICON = 0x0080,
/// The Activate As radio button will be disabled in the Convert dialog box.
CF_CONVERTONLY = 0x0100,
}
/// Initialization and creation flags for .
[PInvokeData("oledlg.h", MSDNShortId = "NS:oledlg.tagOLEUICHANGEICONA")]
[Flags]
public enum CIF
{
/// Dialog box will display a Help button.
CIF_SHOWHELP = 0x00000001,
/// On input, selects the Current radio button on initialization. On exit, specifies that the user selected Current.
CIF_SELECTCURRENT = 0x00000002,
/// On input, selects the Default radio button on initialization. On exit, specifies that the user selected Default.
CIF_SELECTDEFAULT = 0x00000004,
///
/// On input, selects the From File radio button on initialization. On exit, specifies that the user selected From File.
///
CIF_SELECTFROMFILE = 0x00000008,
///
/// Input only. Extracts the icon from the executable specified in the szIconExe member, instead of retrieving it from the
/// class. This is useful for OLE embedding or linking to non-OLE files.
///
CIF_USEICONEXE = 0x00000010,
}
/// Initialization and creation flags for .
[PInvokeData("oledlg.h", MSDNShortId = "NS:oledlg.tagOLEUICHANGESOURCEA")]
[Flags]
public enum CSF
{
/// Enables or shows the Help button.
CSF_SHOWHELP = 0x00000001,
/// Indicates that the link was validated.
CSF_VALIDSOURCE = 0x00000002,
///
/// Disables automatic validation of the link source when the user presses OK. If you specify this flag, you should validate the
/// source when the dialog box returns OK.
///
CSF_ONLYGETSOURCE = 0x00000004,
///
CSF_EXPLORER = 0x00000008,
}
/// On input, dwFlags specifies the initialization and creation flags.
[PInvokeData("oledlg.h", MSDNShortId = "NS:oledlg.tagOLEUIEDITLINKSA")]
[Flags]
public enum ELF
{
/// Specifies that the dialog box will display a Help button.
ELF_SHOWHELP = 0x01,
/// Specifies that the Update Now button will be disabled on initialization.
ELF_DISABLEUPDATENOW = 0x02,
/// Specifies that the Open Source button will be disabled on initialization.
ELF_DISABLEOPENSOURCE = 0x04,
/// Specifies that the Change Source button will be disabled on initialization.
ELF_DISABLECHANGESOURCE = 0x08,
/// Specifies that the Cancel Link button will be disabled on initialization.
ELF_DISABLECANCELLINK = 0x10,
}
/// On input, specifies the initialization and creation flags. On exit, specifies the user's choices.
[PInvokeData("oledlg.h", MSDNShortId = "NS:oledlg.tagOLEUIINSERTOBJECTA")]
[Flags]
public enum IOF
{
/// The dialog box will display a Help button.
IOF_SHOWHELP = 0x00000001,
/// The Create New radio button will initially be checked. This cannot be used with IOF_SELECTCREATEFROMFILE.
IOF_SELECTCREATENEW = 0x00000002,
/// The Create From File radio button will initially be checked. This cannot be used with IOF_SELECTCREATENEW.
IOF_SELECTCREATEFROMFILE = 0x00000004,
/// The Link check box will initially be checked.
IOF_CHECKLINK = 0x00000008,
///
/// The Display As Icon check box will initially be checked, the current icon will be displayed, and the Change Icon button will
/// be enabled.
///
IOF_CHECKDISPLAYASICON = 0x00000010,
///
/// A new object should be created when the user selects OK to dismiss the dialog box and the Create New radio button was selected.
///
IOF_CREATENEWOBJECT = 0x00000020,
///
/// A new object should be created from the specified file when the user selects OK to dismiss the dialog box and the Create
/// From File radio button was selected.
///
IOF_CREATEFILEOBJECT = 0x00000040,
///
/// A new linked object should be created when the user selects OK to dismiss the dialog box and the user checked the Link check box.
///
IOF_CREATELINKOBJECT = 0x00000080,
/// The Link check box will be disabled on initialization.
IOF_DISABLELINK = 0x00000100,
///
/// The dialog box should validate the classes it adds to the listbox by ensuring that the server specified in the registration
/// database exists. This is a significant performance factor.
///
IOF_VERIFYSERVERSEXIST = 0x00000200,
/// The Display As Icon check box will be disabled on initialization.
IOF_DISABLEDISPLAYASICON = 0x00000400,
/// The Change Icon button will be hidden in the Insert Object dialog box.
IOF_HIDECHANGEICON = 0x00000800,
/// Displays the Insert Control radio button.
IOF_SHOWINSERTCONTROL = 0x00001000,
/// Displays the Create Control radio button.
IOF_SELECTCREATECONTROL = 0x00002000,
}
///
/// Indicates the user options that are available to the user when pasting this format, and within which group or list of choices (
/// Paste, Paste Link, etc.).
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/ne-oledlg-oleuipasteflag typedef enum tagOLEUIPASTEFLAG {
// OLEUIPASTE_ENABLEICON, OLEUIPASTE_PASTEONLY, OLEUIPASTE_PASTE, OLEUIPASTE_LINKANYTYPE, OLEUIPASTE_LINKTYPE1,
// OLEUIPASTE_LINKTYPE2, OLEUIPASTE_LINKTYPE3, OLEUIPASTE_LINKTYPE4, OLEUIPASTE_LINKTYPE5, OLEUIPASTE_LINKTYPE6,
// OLEUIPASTE_LINKTYPE7, OLEUIPASTE_LINKTYPE8 } OLEUIPASTEFLAG;
[PInvokeData("oledlg.h", MSDNShortId = "NE:oledlg.tagOLEUIPASTEFLAG")]
[Flags]
public enum OLEUIPASTEFLAG
{
///
/// If the container does not specify this flag for the entry in the OLEUIPASTEENTRY array passed as input to OleUIPasteSpecial,
/// the DisplayAsIcon button will be unchecked and disabled when the user selects the format that corresponds to the entry.
///
OLEUIPASTE_ENABLEICON = 2048,
/// The entry in the OLEUIPASTEENTRY array is valid for pasting only.
OLEUIPASTE_PASTEONLY = 0,
///
/// The entry in the OLEUIPASTEENTRY array is valid for pasting. It may also be valid for linking if any of the following
/// linking flags are specified. If it is valid for linking, then the following flags indicate which link types are acceptable
/// by OR'ing together the appropriate OLEUIPASTE_LINKTYPEn values. These values correspond as follows to the array of link
/// types passed to OleUIPasteSpecial in the arrLinkTypes member of the OLEUIPASTESPECIAL structure:The arrLinkTypes array is an
/// array of registered clipboard formats for linking. A maximum of 8 link types is allowed.
///
OLEUIPASTE_PASTE = 512,
/// Any link type.
OLEUIPASTE_LINKANYTYPE = 1024,
/// Link type 1.
OLEUIPASTE_LINKTYPE1 = 1,
/// Link type 2.
OLEUIPASTE_LINKTYPE2 = 2,
/// Link type 3.
OLEUIPASTE_LINKTYPE3 = 4,
/// Link type 4.
OLEUIPASTE_LINKTYPE4 = 8,
/// Link type 5.
OLEUIPASTE_LINKTYPE5 = 16,
/// Link type 6.
OLEUIPASTE_LINKTYPE6 = 32,
/// Link type 7.
OLEUIPASTE_LINKTYPE7 = 64,
/// Link type 8.
OLEUIPASTE_LINKTYPE8 = 128,
}
/// Contains in/out global flags for the property sheet.
[PInvokeData("oledlg.h", MSDNShortId = "NS:oledlg.tagOLEUIOBJECTPROPSA")]
[Flags]
public enum OPF
{
/// Object is a link object and therefore has a link property page.
OPF_OBJECTISLINK = 0x00000001,
/// Do not fill in default values for the object.
OPF_NOFILLDEFAULT = 0x00000002,
/// The dialog box will display a Help button.
OPF_SHOWHELP = 0x00000004,
/// The Convert button will be disabled on the general property page.
OPF_DISABLECONVERT = 0x00000008,
}
/// On input, dwFlags specifies the initialization and creation flags. On exit, it specifies the user's choices.
[PInvokeData("oledlg.h", MSDNShortId = "NS:oledlg.tagOLEUIPASTESPECIALA")]
[Flags]
public enum PSF
{
/// Dialog box will display a Help button.
PSF_SHOWHELP = 0x00000001,
///
/// The Paste radio button will be selected at dialog box startup. This is the default, if PSF_SELECTPASTE or
/// PSF_SELECTPASTELINK are not specified. Also, it specifies the state of the button on dialog termination. IN/OUT flag.
///
PSF_SELECTPASTE = 0x00000002,
///
/// The PasteLink radio button will be selected at dialog box startup. Also, specifies the state of the button on dialog
/// termination. IN/OUT flag.
///
PSF_SELECTPASTELINK = 0x00000004,
/// Whether the Display As Icon radio button was checked on dialog box termination. OUT flag.
PSF_CHECKDISPLAYASICON = 0x00000008,
/// The Display As Icon check box will be disabled on initialization.
PSF_DISABLEDISPLAYASICON = 0x00000010,
///
/// Used to disable the change-icon button in the dialog box, which is available to users when they're pasting an OLE object by
/// default. See STAYONCLIPBOARDCHANGE otherwise.
///
PSF_HIDECHANGEICON = 0x00000020,
///
/// Used to tell the dialog box to stay up if the clipboard changes while the dialog box is up. If the user switches to another
/// application and copies or cuts something, the dialog box will, by default, perform a cancel operation, which will remove the
/// dialog box since the options it's in the middle of presenting to the user are no longer up-to-date with respect to what's
/// really on the clipboard.
///
PSF_STAYONCLIPBOARDCHANGE = 0x00000040,
///
/// Used in conjunction with STAYONCLIPBOARDCHANGE (it doesn't do anything otherwise). If the clipboard changes while the dialog
/// box is up and STAYONCLIPBOARDCHANGE is specified, then NOREFRESHDATAOBJECT indicates that the dialog box should NOT refresh
/// the contents of the dialog box to reflect the new contents of the clipboard. This is useful if the application is using the
/// paste-special dialog box on an IDataObject besides the one on the clipboard, for example, as part of a right-click
/// drag-and-drop operation.
///
PSF_NOREFRESHDATAOBJECT = 0x00000080,
}
/// Flags specific to view page
[PInvokeData("oledlg.h", MSDNShortId = "NS:oledlg.tagOLEUIVIEWPROPSA")]
[Flags]
public enum VPF : uint
{
/// Relative to origin.
VPF_SELECTRELATIVE = 0x00000001,
/// Disable relative to origin.
VPF_DISABLERELATIVE = 0x00000002,
/// Disable scale option.
VPF_DISABLESCALE = 0x00000004,
}
///
///
/// Implemented by containers and used by OLE common dialog boxes. It supports these dialog boxes by providing the methods needed to
/// manage a container's links.
///
///
/// The IOleUILinkContainer methods enumerate the links associated with a container, and specify how they should be updated,
/// automatically or manually. They change the source of a link and obtain information associated with a link. They also open a
/// link's source document, update links, and break a link to the source.
///
///
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nn-oledlg-ioleuilinkcontainerw
[PInvokeData("oledlg.h", MSDNShortId = "NN:oledlg.IOleUILinkContainerW")]
[ComImport, Guid("000004ff-0000-0000-c000-000000000046"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IOleUILinkContainer
{
/// Enumerates the links in a container.
///
/// Container-defined unique identifier for a single link. This value is only passed to other methods on this interface, so it
/// can be any value that uniquely identifies a link to the container. Containers frequently use the pointer to the link's
/// container site object for this value.
///
/// Returns a container's link identifiers in sequence; NULL if it has returned the last link.
///
/// Notes to Callers
///
/// Call this method to enumerate the links in a container. If the value passed in dwLink is NULL, then the container
/// should return the first link's identifier. If dwLink identifies the last link in the container, then the container should
/// return NULL.
///
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nf-oledlg-ioleuilinkcontainera-getnextlink DWORD GetNextLink( DWORD
// dwLink );
[PreserveSig]
uint GetNextLink(uint dwLink);
/// Sets a link's update options to automatic or manual.
/// Container-defined unique identifier for a single link. See IOleUILinkContainer::GetNextLink.
/// Update options, which can be automatic (OLEUPDATE_ALWAYS) or manual (OLEUPDATE_ONCALL).
///
/// This method returns S_OK on success. Other possible return values include the following.
///
///
/// Return code
/// Description
///
/// -
/// E_ACCESSDENIED
/// Insufficient access permissions.
///
/// -
/// E_FAIL
/// The operation failed.
///
/// -
/// E_INVALIDARG
/// The specified identifier is invalid.
///
/// -
/// E_OUTOFMEMORY
/// There is insufficient memory available for this operation.
///
///
///
///
/// Notes to Implementers
/// Containers can implement this method for OLE links by simply calling IOleLink::SetUpdateOptions on the link object.
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nf-oledlg-ioleuilinkcontainera-setlinkupdateoptions HRESULT
// SetLinkUpdateOptions( DWORD dwLink, DWORD dwUpdateOpt );
[PreserveSig]
HRESULT SetLinkUpdateOptions(uint dwLink, uint dwUpdateOpt);
/// Determines the current update options for a link.
/// Container-defined unique identifier for a single link. See IOleUILinkContainer::GetNextLink.
/// A pointer to the location that the current update options will be written.
///
/// This method returns S_OK on success. Other possible return values include the following.
///
///
/// Return code
/// Description
///
/// -
/// E_ACCESSDENIED
/// Insufficient access permissions.
///
/// -
/// E_FAIL
/// The operation failed.
///
/// -
/// E_INVALIDARG
/// The specified identifier is invalid.
///
/// -
/// E_OUTOFMEMORY
/// There is insufficient memory available for this operation.
///
///
///
///
/// Notes to Implementers
/// Containers can implement this method for OLE links simply by calling IOleLink::SetUpdateOptions on the link object.
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nf-oledlg-ioleuilinkcontainera-getlinkupdateoptions HRESULT
// GetLinkUpdateOptions( DWORD dwLink, DWORD *lpdwUpdateOpt );
[PreserveSig]
HRESULT GetLinkUpdateOptions(uint dwLink, out uint lpdwUpdateOpt);
/// Changes the source of a link.
/// Container-defined unique identifier for a single link. See IOleUILinkContainer::GetNextLink.
/// Pointer to new source string to be parsed.
///
/// Length of the leading file name portion of the lpszDisplayName string. If the link source is not stored in a file, then
/// lenFileName should be 0. For OLE links, call IOleLink::GetSourceDisplayName.
///
/// Pointer to the number of characters successfully parsed in lpszDisplayName.
///
/// TRUE if the moniker should be validated; for OLE links, MkParseDisplayName should be called. FALSE if the
/// moniker should not be validated. If possible, the link should accept the unvalidated source, and mark itself as unavailable.
///
///
/// This method returns S_OK on success. Other possible return values include the following.
///
///
/// Return code
/// Description
///
/// -
/// E_ACCESSDENIED
/// Insufficient access permissions.
///
/// -
/// E_FAIL
/// The operation failed.
///
/// -
/// E_INVALIDARG
/// The supplied identifier is invalid.
///
/// -
/// E_OUTOFMEMORY
/// Insufficient memory available for this operation.
///
///
///
///
/// Notes to Callers
///
/// Call this method from the Change Source dialog box, with fValidateSource initially set to TRUE. Change
/// Source can be called directly or from the Links dialog box. If this call to
/// IOleUILinkContainer::SetLinkSource returns an error (e.g., MkParseDisplayName failed because the source was
/// unavailable), then you should display an Invalid Link Source message, and the user should be allowed to decide
/// whether to fix the source. If the user chooses to fix the source, then the user should be returned to the Change
/// Source dialog box with the invalid portion of the input string highlighted. If the user chooses not to fix the source,
/// then IOleUILinkContainer::SetLinkSource should be called a second time with fValidateSource set to FALSE, and
/// the user should be returned to the Links dialog box with the link marked Unavailable.
///
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nf-oledlg-ioleuilinkcontainera-setlinksource HRESULT SetLinkSource(
// DWORD dwLink, LPSTR lpszDisplayName, ULONG lenFileName, ULONG *pchEaten, BOOL fValidateSource );
[PreserveSig]
HRESULT SetLinkSource(uint dwLink, [MarshalAs(UnmanagedType.LPStr)] string lpszDisplayName,
uint lenFileName, out uint pchEaten, [MarshalAs(UnmanagedType.Bool)] bool fValidateSource);
/// Retrieves information about a link that can be displayed in the Links dialog box.
/// Container-defined unique identifier for a single link. See IOleUILinkContainer::GetNextLink.
///
/// Address of a pointer variable that receives a pointer to the full display name string for the link source. The Links
/// dialog box will free this string.
///
///
/// Pointer to the length of the leading file name portion of the lplpszDisplayName string. If the link source is not stored in
/// a file, then lplenFileName should be 0. For OLE links, call IOleLink::GetSourceDisplayName.
///
///
/// Address of a pointer variable that receives a pointer to the full link type string that is displayed at the bottom of the
/// Links dialog box. The caller allocates this string. The Links dialog box will free this string. For OLE links,
/// this should be the full User Type name. Use IOleObject::GetUserType, specifying USERCLASSTYPE_FULL for dwFormOfType.
///
///
/// Address of a pointer variable that receives a pointer to the short link type string that is displayed in the listbox of the
/// Links dialog box. The caller allocates this string. The Links dialog box will free this string. For OLE links,
/// this should be the short user type name. Use IOleObject::GetUserType, specifying USERCLASSTYPE_SHORT for dwFormOfType.
///
///
/// Pointer that returns FALSE if it is known that a link is unavailable since the link is to some known but unavailable
/// document. Certain options, such as Update Now, are disabled (grayed in the user interface) for such cases.
///
///
/// Pointer to a variable that tells the Edit Links dialog box that this link's entry should be selected in the dialog's
/// multi-selection listbox. OleUIEditLinks calls this method at least once for each item to be placed in the links list. If
/// none of them return TRUE, then none of them will be selected when the dialog box is first displayed. If all of them
/// return TRUE, then all will be displayed. That is, it returns TRUE if this link is currently part of the
/// selection in the underlying document, FALSE if not. Any links that are selected in the underlying document are
/// selected in the dialog box; this way, the user can select a set of links and use the dialog box to update them or change
/// their source(s) simultaneously.
///
///
/// This method returns S_OK on success. Other possible return values include the following.
///
///
/// Return code
/// Description
///
/// -
/// E_ACCESSDENIED
/// Insufficient access permissions.
///
/// -
/// E_FAIL
/// The operation failed.
///
/// -
/// E_INVALIDARG
/// The specified identifier is invalid.
///
/// -
/// E_OUTOFMEMORY
/// There is insufficient memory available for this operation.
///
///
///
///
/// Notes to Callers
/// Call this method during dialog box initialization, after returning from the Change Source dialog box.
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nf-oledlg-ioleuilinkcontainera-getlinksource HRESULT GetLinkSource(
// DWORD dwLink, LPSTR *lplpszDisplayName, ULONG *lplenFileName, LPSTR *lplpszFullLinkType, LPSTR *lplpszShortLinkType, BOOL
// *lpfSourceAvailable, BOOL *lpfIsSelected );
[PreserveSig]
HRESULT GetLinkSource(uint dwLink, [MarshalAs(UnmanagedType.LPStr)] out string lplpszDisplayName, out uint lplenFileName,
[MarshalAs(UnmanagedType.LPStr)] out string lplpszFullLinkType, [MarshalAs(UnmanagedType.LPStr)] out string lplpszShortLinkType,
[MarshalAs(UnmanagedType.Bool)] out bool lpfSourceAvailable, [MarshalAs(UnmanagedType.Bool)] out bool lpfIsSelected);
/// Opens the link's source.
///
/// Container-defined unique identifier for a single link. Containers can use the pointer to the link's container site for this value.
///
///
/// This method returns S_OK on success. Other possible return values include the following.
///
///
/// Return code
/// Description
///
/// -
/// E_ACCESSDENIED
/// Insufficient access permissions.
///
/// -
/// E_FAIL
/// The operation failed.
///
/// -
/// E_INVALIDARG
/// The specified identifier is invalid.
///
/// -
/// E_OUTOFMEMORY
/// There is insufficient memory available for this operation.
///
///
///
///
/// Notes to Callers
///
/// The IOleUILinkContainer::OpenLinkSource method is called when the Open Source button is selected from the
/// Links dialog box. For OLE links, call IOleObject::DoVerb, specifying OLEIVERB_SHOW for iVerb.
///
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nf-oledlg-ioleuilinkcontainera-openlinksource HRESULT
// OpenLinkSource( DWORD dwLink );
[PreserveSig]
HRESULT OpenLinkSource(uint dwLink);
/// Forces selected links to connect to their source and retrieve current information.
///
/// Container-defined unique identifier for a single link. Containers can use the pointer to the link's container site for this value.
///
///
/// Determines whether the caller (implementer of IOleUILinkContainer) should show an error message upon failure to update a
/// link. The Update Links dialog box sets this to FALSE. The Object Properties and Links dialog
/// boxes set it to TRUE.
///
/// This parameter is reserved and must be set to FALSE.
///
/// This method returns S_OK on success. Other possible return values include the following.
///
///
/// Return code
/// Description
///
/// -
/// E_ACCESSDENIED
/// Insufficient access permissions.
///
/// -
/// E_FAIL
/// The operation failed.
///
/// -
/// E_INVALIDARG
/// The specified identifier is invalid.
///
/// -
/// E_OUTOFMEMORY
/// There is insufficient memory available for this operation.
///
///
///
///
/// Notes to Callers
///
/// Call this method with fErrorMessage set to TRUE in cases where the user expressly presses a button to have a link
/// updated, that is, presses the links' Update Now button. Call it with FALSE in cases where the container should
/// never display an error message, that is, where a large set of operations are being performed and the error should be
/// propagated back to the user later, as might occur with the Update links progress meter. Rather than providing one
/// message for each failure, assuming there are failures, provide a single message for all failures at the end of the operation.
///
/// Notes to Implementers
/// For OLE links, call IOleObject::Update.
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nf-oledlg-ioleuilinkcontainera-updatelink HRESULT UpdateLink( DWORD
// dwLink, BOOL fErrorMessage, BOOL fReserved );
[PreserveSig]
HRESULT UpdateLink(uint dwLink, [MarshalAs(UnmanagedType.Bool)] bool fErrorMessage, [MarshalAs(UnmanagedType.Bool)] bool fReserved);
/// Disconnects the selected links.
///
/// Container-defined unique identifier for a single link. Containers can use the pointer to the link's container site for this value.
///
///
/// This method returns S_OK on success. Other possible return values include the following.
///
///
/// Return code
/// Description
///
/// -
/// E_ACCESSDENIED
/// Insufficient access permissions.
///
/// -
/// E_FAIL
/// The operation failed.
///
/// -
/// E_INVALIDARG
/// The specified identifier is invalid.
///
/// -
/// E_OUTOFMEMORY
/// There is insufficient memory available for this operation.
///
///
///
///
/// Notes to Callers
///
/// Call IOleUILinkContainer::CancelLink when the user selects the Break Link button from the Links dialog
/// box. The link should be converted to a picture. The Links dialog box will not be dismissed for OLE links.
///
/// Notes to Implementers
///
/// For OLE links, OleCreateStaticFromData can be used to create a static picture object using the IDataObject interface of the
/// link as the source.
///
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nf-oledlg-ioleuilinkcontainera-cancellink HRESULT CancelLink( DWORD
// dwLink );
[PreserveSig]
HRESULT CancelLink(uint dwLink);
}
///
/// An extension of the IOleUILinkContainer interface. It returns the time that an object was last updated, which is link
/// information that IOleUILinkContainer does not provide.
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nn-oledlg-ioleuilinkinfoa
[PInvokeData("oledlg.h", MSDNShortId = "NN:oledlg.IOleUILinkInfoA")]
public interface IOleUILinkInfo : IOleUILinkContainer
{
/// Determines the last time the object was updated.
///
/// Container-defined unique identifier for a single link. Containers can use the pointer to the link's container site for this value.
///
/// A pointer to a FILETIME structure that indicates the time that the object was last updated.
///
/// This method returns S_OK on success. Other possible return values include the following.
///
///
/// Return code
/// Description
///
/// -
/// E_ACCESSDENIED
/// Insufficient access permissions.
///
/// -
/// E_FAIL
/// The operation failed.
///
/// -
/// E_INVALIDARG
/// The specified identifier is invalid.
///
/// -
/// E_OUTOFMEMORY
/// There is insufficient memory available for this operation.
///
///
///
///
/// Notes to Implementers
///
/// If the time that the object was last updated is known, copy it to lpLastUpdate. If it is not known, then leave lpLastUpdate
/// unchanged and Unknown will be displayed in the link page.
///
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nf-oledlg-ioleuilinkinfoa-getlastupdate HRESULT GetLastUpdate(
// DWORD dwLink, FILETIME *lpLastUpdate );
[PreserveSig]
HRESULT GetLastUpdate(uint dwLink, out FILETIME lpLastUpdate);
}
///
/// Implemented by containers and used by the container's Object Properties dialog box and by the Convert dialog box.
/// It provides information used by the General and View pages of the Object Properties dialog box , which
/// display information about the object's size, location, type, and name. It also allows the object to be converted using the
/// Convert dialog box. The View page allows the object's icon to be modified from its original form, and its display
/// aspect to be changed (iconic versus content). Optionally, you can have your implementation of this interface allow the scale of
/// the object to be changed.
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nn-oledlg-ioleuiobjinfow
[PInvokeData("oledlg.h", MSDNShortId = "NN:oledlg.IOleUIObjInfoW")]
public interface IOleUIObjInfo
{
/// Converts the object to the type of the specified CLSID.
/// A unique identifier for the object.
/// The CLSID.
///
/// This method returns S_OK on success. Other possible return values include the following.
///
///
/// Return code
/// Description
///
/// -
/// E_ACCESSDENIED
/// Insufficient access permissions.
///
/// -
/// E_FAIL
/// The operation failed.
///
/// -
/// E_INVALIDARG
/// The specified identifier is not valid.
///
/// -
/// E_OUTOFMEMORY
/// There is insufficient memory available for this operation.
///
///
///
///
/// Notes to Implementers
///
/// Your implementation of IOleUIObjInfo::ConvertObject needs to convert the object to the CLSID specified. The actions
/// taken by the convert operation are similar to the actions taken after calling OleUIConvert.
///
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nf-oledlg-ioleuiobjinfoa-convertobject HRESULT ConvertObject( DWORD
// dwObject, REFCLSID clsidNew );
[PreserveSig]
HRESULT ConvertObject(uint dwObject, in Guid clsidNew);
/// Gets the conversion information associated with the specified object.
/// Unique identifier for the object.
/// Pointer to the location to return the object's CLSID.
/// Pointer to the clipboard format of the object.
/// Pointer to the default class, selected from the UI, to convert the object to.
///
/// Address of a pointer variable that receives a pointer to an array of CLSIDs that should be excluded from the user interface
/// for this object. If lpcClsidExclude is zero, then lpClsidExclude is set to NULL.
///
///
/// Address of an output variable that receives the number of CLSIDs in lplpClsidExclude. This parameter may be zero.
///
///
/// This method returns S_OK on success. Other possible return values include the following.
///
///
/// Return code
/// Description
///
/// -
/// E_ACCESSDENIED
/// Insufficient access permissions.
///
/// -
/// E_FAIL
/// The operation failed.
///
/// -
/// E_INVALIDARG
/// The specified identifier is invalid.
///
/// -
/// E_OUTOFMEMORY
/// There is insufficient memory available for this operation.
///
///
///
///
/// Notes to Implementers
///
/// You must fill in the CLSID of the object at a minimum. lpwFormat may be left at zero if the format of the storage is unknown.
///
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nf-oledlg-ioleuiobjinfoa-getconvertinfo HRESULT GetConvertInfo(
// DWORD dwObject, CLSID *lpClassID, WORD *lpwFormat, CLSID *lpConvertDefaultClassID, LPCLSID *lplpClsidExclude, UINT
// *lpcClsidExclude );
[PreserveSig]
HRESULT GetConvertInfo(uint dwObject, out Guid lpClassID, out ushort lpwFormat, out Guid lpConvertDefaultClassID,
out IntPtr lplpClsidExclude, out uint lpcClsidExclude);
/// Gets the size, type, name, and location information for an object.
/// Unique identifier for the object.
/// Pointer to the object's size, in bytes, on disk. This may be an approximate value.
///
/// Address of a pointer variable that receives a pointer to the object's label string. This parameter may be NULL to
/// indicate that the implementation should not return the label string.
///
///
/// Address of a pointer variable that receives a pointer to the object's long type string. This parameter may be NULL to
/// indicate that the implementation should not return the long type string.
///
///
/// Address of a pointer variable that receives a pointer to the object's short type string. This parameter may be NULL
/// to indicate that the implementation should not return the short type string.
///
///
/// Address of a pointer variable that receives a pointer to the object's source location string. This parameter may be
/// NULL to indicate that the implementation should not return the location string.
///
///
/// This method returns S_OK on success. Other possible return values include the following.
///
///
/// Return code
/// Description
///
/// -
/// E_FAIL
/// The operation failed.
///
/// -
/// E_INVALIDARG
/// The specified identifier is invalid.
///
/// -
/// E_OUTOFMEMORY
/// There is insufficient memory available for this operation.
///
///
///
///
/// The strings and the object's size are displayed in the object properties General page.
/// Notes to Implementers
///
/// Your implementation of GetObjectInfo should place each of the object's attributes in the out parameters provided. Set
/// lpdwObjSize to (DWORD)-1 when the size of the object is unknown. Allocate all strings (the rest of the params) with the OLE
/// task allocator obtained via CoGetMalloc, as is standard for all OLE interfaces with [out] string parameters, or you can
/// simply use CoTaskMemAlloc.
///
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nf-oledlg-ioleuiobjinfoa-getobjectinfo HRESULT GetObjectInfo( DWORD
// dwObject, DWORD *lpdwObjSize, LPSTR *lplpszLabel, LPSTR *lplpszType, LPSTR *lplpszShortType, LPSTR *lplpszLocation );
[PreserveSig]
HRESULT GetObjectInfo(uint dwObject, out uint lpdwObjSize, [MarshalAs(UnmanagedType.LPStr)] out string lplpszLabel,
[MarshalAs(UnmanagedType.LPStr)] out string lplpszType, [MarshalAs(UnmanagedType.LPStr)] out string lplpszShortType,
[MarshalAs(UnmanagedType.LPStr)] out string lplpszLocation);
/// Gets the view information associated with the object.
/// Unique identifier for the object.
///
/// Pointer to the object's current icon. This parameter can be NULL, indicating that the caller is not interested in the
/// object's current presentation.
///
///
/// Pointer to the object's current aspect. This parameter can be NULL, indicating that the caller is not interested in
/// the object's current aspect, for example, DVASPECT_ICONIC or DVASPECT_CONTENT.
///
///
/// Pointer to the object's current scale. This parameter can be NULL, indicating that the caller is not interested in
/// the current scaling factor applied to the object in the container's view.
///
///
/// This method returns S_OK on success. Other possible return values include the following.
///
///
/// Return code
/// Description
///
/// -
/// E_ACCESSDENIED
/// Insufficient access permissions.
///
/// -
/// E_FAIL
/// The operation failed.
///
/// -
/// E_INVALIDARG
/// The specified identifier is not valid.
///
/// -
/// E_OUTOFMEMORY
/// There is insufficient memory available for this operation.
///
///
///
///
/// Notes to Implementers
/// You must fill in the object's current icon, aspect, and scale.
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nf-oledlg-ioleuiobjinfoa-getviewinfo HRESULT GetViewInfo( DWORD
// dwObject, HGLOBAL *phMetaPict, DWORD *pdvAspect, int *pnCurrentScale );
[PreserveSig]
HRESULT GetViewInfo(uint dwObject, [In, Optional] IntPtr phMetaPict, [In, Optional] IntPtr pdvAspect, [In, Optional] IntPtr pnCurrentScale);
/// Sets the view information associated with the object.
/// Unique identifier for the object.
/// The new icon.
/// The new display aspect or view.
/// The new scale.
///
/// The new scale of the object, relative to the origin. This value is TRUE if the scale should be relative to the
/// original scale of the object. If FALSE, nCurrentScale applies to the object's current size.
///
///
/// This method returns S_OK on success. Other possible return values include the following.
///
///
/// Return code
/// Description
///
/// -
/// E_ACCESSDENIED
/// Insufficient access permissions.
///
/// -
/// E_FAIL
/// The operation failed.
///
/// -
/// E_INVALIDARG
/// The specified identifier is invalid.
///
/// -
/// E_OUTOFMEMORY
/// There is insufficient memory available for this operation.
///
///
///
///
/// Notes to Implementers
///
/// You should apply the new attributes (icon, aspect, and scale) to the object. If bRelativeToOrig is set to TRUE,
/// nCurrentScale (in percentage units) applies to the original size of the object before it was scaled. If bRelativeToOrig is
/// FALSE, nCurrentScale applies to the object's current size.
///
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nf-oledlg-ioleuiobjinfoa-setviewinfo HRESULT SetViewInfo( DWORD
// dwObject, HGLOBAL hMetaPict, DWORD dvAspect, int nCurrentScale, BOOL bRelativeToOrig );
[PreserveSig]
HRESULT SetViewInfo(uint dwObject, HGLOBAL hMetaPict, DVASPECT dvAspect, int nCurrentScale,
[MarshalAs(UnmanagedType.Bool)] bool bRelativeToOrig);
}
/// Adds the Verb menu for the specified object to the specified menu.
///
/// Pointer to the IOleObject interface on the selected object. If this is NULL, then a default disabled menu item is created.
///
///
/// Pointer to the short name defined in the registry (AuxName==2) for the object identified with lpOleObj. If the string is not
/// known, then NULL may be passed. If NULL is passed, IOleObject::GetUserType is called to retrieve it. If the caller
/// has easy access to the string, it is faster to pass it in.
///
/// Handle to the menu in which to make modifications.
/// Position of the menu item.
/// The identifier value at which to start the verbs.
///
/// The maximum identifier value to be used for object verbs. If uIDVerbMax is 0, then no maximum identifier value is used.
///
/// Indicates whether to add a Convert item to the bottom of the menu (preceded by a separator).
/// The identifier value to use for the Convert menu item, if bAddConvert is TRUE.
///
/// An HMENU pointer to the cascading verb menu if it's created. If there is only one verb, this will be filled with NULL.
///
///
/// This function returns TRUE if lpOleObj was valid and at least one verb was added to the menu. A FALSE return
/// indicates that lpOleObj was NULL and a disabled default menu item was created.
///
/// If the object has one verb, the verb is added directly to the given menu.
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nf-oledlg-oleuiaddverbmenua BOOL OleUIAddVerbMenuA( LPOLEOBJECT
// lpOleObj, LPCSTR lpszShortType, HMENU hMenu, UINT uPos, UINT uIDVerbMin, UINT uIDVerbMax, BOOL bAddConvert, UINT idConvert, HMENU
// *lphMenu );
[DllImport(Lib_OleDlg, SetLastError = false, CharSet = CharSet.Auto)]
[PInvokeData("oledlg.h", MSDNShortId = "NF:oledlg.OleUIAddVerbMenuA")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool OleUIAddVerbMenu(IOleObject lpOleObj, [MarshalAs(UnmanagedType.LPTStr)] string lpszShortType, HMENU hMenu, uint uPos, uint uIDVerbMin, uint uIDVerbMax,
[MarshalAs(UnmanagedType.Bool)] bool bAddConvert, uint idConvert, out HMENU lphMenu);
/// Invokes the standard Busy dialog box, allowing the user to manage concurrency.
/// Pointer to an OLEUIBUSY structure that contains information used to initialize the dialog box.
///
/// This function returns the following values:
/// Standard Success/Error Definitions
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_FALSE
/// Unknown failure (unused).
///
/// -
/// OLEUI_SUCCESS
/// No error, same as OLEUI_OK.
///
/// -
/// OLEUI_OK
/// The user pressed the OK button.
///
/// -
/// OLEUI_CANCEL
/// The user has pressed the Cancel button and that the caller should cancel the operation.
///
/// -
/// OLEUI_BZ_SWITCHTOSELECTED
///
/// The user has pressed Switch To and OleUIBusy was unable to determine how to switch to the blocking application. In this case,
/// the caller should either take measures to attempt to resolve the conflict itself, if possible, or retry the operation. OleUIBusy
/// will only return OLEUI_BZ_SWITCHTOSELECTED if the user has pressed the Switch To button, hTask is NULL and the BZ_NOTRESPONDING
/// flag is set.
///
///
/// -
/// OLEUI_BZ_SWITCHTOSELECTED
///
/// The user has pressed Switch To and OleUIBusy was unable to determine how to switch to the blocking application. In this case,
/// the caller should either take measures to attempt to resolve the conflict itself, if possible, or retry the operation. OleUIBusy
/// will only return OLEUI_BZ_SWITCHTOSELECTED if the user has pressed the Switch To button, hTask is NULL and the BZ_NOTRESPONDING
/// flag is set.
///
///
/// -
/// OLEUI_BZ_SWITCHTOSELECTED
///
/// The user has pressed Switch To and OleUIBusy was unable to determine how to switch to the blocking application. In this case,
/// the caller should either take measures to attempt to resolve the conflict itself, if possible, or retry the operation. OleUIBusy
/// will only return OLEUI_BZ_SWITCHTOSELECTED if the user has pressed the Switch To button, hTask is NULL and the BZ_NOTRESPONDING
/// flag is set.
///
///
/// -
/// OLEUI_BZ_RETRYSELECTED
///
/// The user has either pressed the Retry button or attempted to resolve the conflict (probably by switching to the blocking
/// application). In this case, the caller should retry the operation.
///
///
/// -
/// OLEUI_BZ_CALLUNBLOCKED
/// The dialog box has been informed that the operation is no longer blocked.
///
///
/// Standard Field Validation Errors
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_ERR_STANDARDMIN
///
/// Errors common to all dialog boxes lie in the range OLEUI_ERR_STANDARDMIN to OLEUI_ERR_STANDARDMAX. This value allows the
/// application to test for standard messages in order to display error messages to the user.
///
///
/// -
/// OLEUI_ERR_STRUCTURENULL
/// The pointer to an OLEUIXXX structure passed into the function was NULL.
///
/// -
/// OLEUI_ERR_STRUCTUREINVALID
/// Insufficient permissions for read or write access to an OLEUIXXX structure.
///
/// -
/// OLEUI_ERR_CBSTRUCTINCORRECT
/// The cbstruct value is incorrect.
///
/// -
/// OLEUI_ERR_HWNDOWNERINVALID
/// The hWndOwner value is invalid.
///
/// -
/// OLEUI_ERR_LPSZCAPTIONINVALID
/// The lpszCaption value is invalid.
///
/// -
/// OLEUI_ERR_LPFNHOOKINVALID
/// The lpfnHook value is invalid.
///
/// -
/// OLEUI_ERR_HINSTANCEINVALID
/// The hInstance value is invalid.
///
/// -
/// OLEUI_ERR_LPSZTEMPLATEINVALID
/// The lpszTemplate value is invalid.
///
/// -
/// OLEUI_ERR_HRESOURCEINVALID
/// The hResource value is invalid.
///
///
/// Initialization Errors
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_ERR_FINDTEMPLATEFAILURE
/// Unable to find the dialog box template.
///
/// -
/// OLEUI_ERR_LOADTEMPLATEFAILURE
/// Unable to load the dialog box template.
///
/// -
/// OLEUI_ERR_DIALOGFAILURE
/// Dialog box initialization failed.
///
/// -
/// OLEUI_ERR_LOCALMEMALLOC
/// A call to LocalAlloc or the standard IMalloc allocator failed.
///
/// -
/// OLEUI_ERR_GLOBALMEMALLOC
/// A call to GlobalAlloc or the standard IMalloc allocator failed.
///
/// -
/// OLEUI_ERR_LOADSTRING
/// Unable to call LoadString for the localized resources from the library.
///
/// -
/// OLEUI_ERR_OLEMEMALLOC
/// A call to the standard IMalloc allocator failed.
///
///
/// Function Specific Errors
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_ERR_STANDARDMAX
///
/// Errors common to all dialog boxes lie in the range OLEUI_ERR_STANDARDMIN to OLEUI_ERR_STANDARDMAX. This value allows the
/// application to test for standard messages in order to display error messages to the user.
///
///
/// -
/// OLEUI_BZERR_HTASKINVALID
/// The hTask specified in the hTask member of the OLEUIBUSY structure is invalid.
///
///
///
///
/// The standard OLE Server Busy dialog box notifies the user that the server application is not receiving messages. The
/// dialog box then asks the user to cancel the operation, switch to the task that is blocked, or continue waiting.
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nf-oledlg-oleuibusya UINT OleUIBusyA( LPOLEUIBUSYA Arg1 );
[DllImport(Lib_OleDlg, SetLastError = false, CharSet = CharSet.Auto)]
[PInvokeData("oledlg.h", MSDNShortId = "NF:oledlg.OleUIBusyA")]
public static extern uint OleUIBusy(ref OLEUIBUSY Arg1);
///
/// Determines if there are any OLE object classes in the registry that can be used to convert or activate the specified CLSID from.
///
/// The CLSID of the class for which the information is required.
/// TRUE if the original object is a linked object; FALSE otherwise.
/// Format of the original class.
/// This function returns TRUE if the specified class can be converted to another class; FALSE otherwise.
///
///
/// OleUICanConvertOrActivateAs searches the registry for classes that include wFormat in their \Conversion\Readable\Main,
/// \Conversion\ReadWriteable\Main, and \DataFormats\DefaultFile entries.
///
///
/// This function is useful for determining if a Convert... menu item should be disabled. If the CF_DISABLEDISPLAYASICON flag
/// is specified in the call to OleUIConvert, then the Convert... menu item should be enabled only if
/// OleUICanConvertOrActivateAs returns TRUE.
///
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nf-oledlg-oleuicanconvertoractivateas BOOL OleUICanConvertOrActivateAs(
// REFCLSID rClsid, BOOL fIsLinkedObject, WORD wFormat );
[DllImport(Lib_OleDlg, SetLastError = false, ExactSpelling = true)]
[PInvokeData("oledlg.h", MSDNShortId = "NF:oledlg.OleUICanConvertOrActivateAs")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool OleUICanConvertOrActivateAs(in Guid rClsid, [MarshalAs(UnmanagedType.Bool)] bool fIsLinkedObject, ushort wFormat);
///
/// Invokes the standard Change Icon dialog box, which allows the user to select an icon from an icon file, executable, or DLL.
///
/// Pointer to the In/Out OLEUICHANGEICON structure for this dialog box.
///
/// Standard Success/Error Definitions
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_FALSE
/// Unknown failure (unused).
///
/// -
/// OLEUI_OK
/// The user pressed the OK button.
///
/// -
/// OLEUI_SUCCESS
/// No error, same as OLEUI_OK.
///
/// -
/// OLEUI_CANCEL
/// The user pressed the Cancel button.
///
///
/// Standard Field Validation Errors
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_ERR_STANDARDMIN
///
/// Errors common to all dialog boxes lie in the range OLEUI_ERR_STANDARDMIN to OLEUI_ERR_STANDARDMAX. This value allows the
/// application to test for standard messages in order to display error messages to the user.
///
///
/// -
/// OLEUI_ERR_STRUCTURENULL
/// The pointer to an OLEUIXXX structure passed into the function was NULL.
///
/// -
/// OLEUI_ERR_STRUCTUREINVALID
/// Insufficient permissions for read or write access to an OLEUIXXX structure.
///
/// -
/// OLEUI_ERR_CBSTRUCTINCORRECT
/// The cbstruct value is incorrect.
///
/// -
/// OLEUI_ERR_HWNDOWNERINVALID
/// The hWndOwner value is invalid.
///
/// -
/// OLEUI_ERR_LPSZCAPTIONINVALID
/// The lpszCaption value is invalid.
///
/// -
/// OLEUI_ERR_LPFNHOOKINVALID
/// The lpfnHook value is invalid.
///
/// -
/// OLEUI_ERR_HINSTANCEINVALID
/// The hInstance value is invalid.
///
/// -
/// OLEUI_ERR_LPSZTEMPLATEINVALID
/// The lpszTemplate value is invalid.
///
/// -
/// OLEUI_ERR_HRESOURCEINVALID
/// The hResource value is invalid.
///
///
/// Initialization Errors
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_ERR_FINDTEMPLATEFAILURE
/// Unable to find the dialog box template.
///
/// -
/// OLEUI_ERR_LOADTEMPLATEFAILURE
/// Unable to load the dialog box template.
///
/// -
/// OLEUI_ERR_DIALOGFAILURE
/// Dialog box initialization failed.
///
/// -
/// OLEUI_ERR_LOCALMEMALLOC
/// A call to LocalAlloc or the standard IMalloc allocator failed.
///
/// -
/// OLEUI_ERR_GLOBALMEMALLOC
/// A call to GlobalAlloc or the standard IMalloc allocator failed.
///
/// -
/// OLEUI_ERR_LOADSTRING
/// Unable to call LoadString for localized resources from the library.
///
/// -
/// OLEUI_ERR_OLEMEMALLOC
/// A call to the standard IMalloc allocator failed.
///
///
/// Function Specific Errors
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_ERR_STANDARDMAX
///
/// Errors common to all dialog boxes lie in the range OLEUI_ERR_STANDARDMIN to OLEUI_ERR_STANDARDMAX. This value allows the
/// application to test for standard messages in order to display error messages to the user.
///
///
/// -
/// OLEUI_CIERR_MUSTHAVECLSID
/// The clsid member was not the current CLSID.
///
/// -
/// OLEUI_CIERR_MUSTHAVECURRENTMETAFILE
/// The hMetaPict member was not the current metafile.
///
/// -
/// OLEUI_CIERR_SZICONEXEINVALID
/// The szIconExe value was invalid.
///
///
///
/// OLEUICHANGEICON structure.
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nf-oledlg-oleuichangeicona UINT OleUIChangeIconA( LPOLEUICHANGEICONA
// Arg1 );
[DllImport(Lib_OleDlg, SetLastError = false, CharSet = CharSet.Auto)]
[PInvokeData("oledlg.h", MSDNShortId = "NF:oledlg.OleUIChangeIconA")]
public static extern uint OleUIChangeIcon(ref OLEUICHANGEICON Arg1);
/// Invokes the Change Source dialog box, allowing the user to change the source of a link.
/// Pointer to the in-out OLEUICHANGESOURCE structure for this dialog box.
///
/// Standard Success/Error Definitions
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_FALSE
/// Unknown failure (unused).
///
/// -
/// OLEUI_OK
/// The user pressed the OK button.
///
/// -
/// OLEUI_SUCCESS
/// No error, same as OLEUI_OK.
///
/// -
/// OLEUI_CANCEL
/// The user pressed the Cancel button.
///
///
/// Standard Field Validation Errors
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_ERR_STANDARDMIN
///
/// Errors common to all dialog boxes lie in the range OLEUI_ERR_STANDARDMIN to OLEUI_ERR_STANDARDMAX. This value allows the
/// application to test for standard messages in order to display error messages to the user.
///
///
/// -
/// OLEUI_ERR_STRUCTURENULL
/// The pointer to an OLEUIXXX structure passed into the function was NULL.
///
/// -
/// OLEUI_ERR_STRUCTUREINVALID
/// Insufficient permissions for read or write access to an OLEUIXXX structure.
///
/// -
/// OLEUI_ERR_CBSTRUCTINCORRECT
/// The cbstruct value is incorrect.
///
/// -
/// OLEUI_ERR_HWNDOWNERINVALID
/// The hWndOwner value is invalid.
///
/// -
/// OLEUI_ERR_LPSZCAPTIONINVALID
/// The lpszCaption value is invalid.
///
/// -
/// OLEUI_ERR_LPFNHOOKINVALID
/// The lpfnHook value is invalid.
///
/// -
/// OLEUI_ERR_HINSTANCEINVALID
/// The hInstance value is invalid.
///
/// -
/// OLEUI_ERR_LPSZTEMPLATEINVALID
/// The lpszTemplate value is invalid.
///
/// -
/// OLEUI_ERR_HRESOURCEINVALID
/// The hResource value is invalid.
///
///
/// Initialization Errors
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_ERR_FINDTEMPLATEFAILURE
/// Unable to find the dialog box template.
///
/// -
/// OLEUI_ERR_LOADTEMPLATEFAILURE
/// Unable to load the dialog box template.
///
/// -
/// OLEUI_ERR_DIALOGFAILURE
/// Dialog box initialization failed.
///
/// -
/// OLEUI_ERR_LOCALMEMALLOC
/// A call to LocalAlloc or the standard IMalloc allocator failed.
///
/// -
/// OLEUI_ERR_GLOBALMEMALLOC
/// A call to GlobalAlloc or the standard IMalloc allocator failed.
///
/// -
/// OLEUI_ERR_LOADSTRING
/// Unable to call LoadString for localized resources from the library.
///
/// -
/// OLEUI_ERR_OLEMEMALLOC
/// A call to the standard IMalloc allocator failed.
///
///
/// Function Specific Errors
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_ERR_STANDARDMAX
///
/// Errors common to all dialog boxes lie in the range OLEUI_ERR_STANDARDMIN to OLEUI_ERR_STANDARDMAX. This value allows the
/// application to test for standard messages in order to display error messages to the user.
///
///
/// -
/// OLEUI_CSERR_LINKCNTRNULL
/// The lpOleUILinkContainer value is NULL.
///
/// -
/// OLEUI_CSERR_LINKCNTRINVALID
/// The lpOleUILinkContainer value is invalid.
///
/// -
/// OLEUI_CSERR_FROMNOTNULL
/// The lpszFrom value is not NULL.
///
/// -
/// OLEUI_CSERR_TONOTNULL
/// The lpszTo value is not NULL.
///
/// -
/// OLEUI_CSERR_SOURCEINVALID
/// The lpszDisplayName or nFileLength value is invalid, or cannot retrieve the link source.
///
/// -
/// OLEUI_CSERR_SOURCEPARSEERROR
/// The nFilename value is wrong.
///
///
///
///
/// The link source is not changed by the Change Source dialog box itself. Instead, it is up to the caller to change the link
/// source using the returned file and item strings. The Edit Links dialog box typically does this for the caller.
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nf-oledlg-oleuichangesourcea UINT OleUIChangeSourceA(
// LPOLEUICHANGESOURCEA Arg1 );
[DllImport(Lib_OleDlg, SetLastError = false, CharSet = CharSet.Auto)]
[PInvokeData("oledlg.h", MSDNShortId = "NF:oledlg.OleUIChangeSourceA")]
public static extern uint OleUIChangeSource(ref OLEUICHANGESOURCE Arg1);
///
/// Invokes the standard Convert dialog box, allowing the user to change the type of a single specified object, or the type
/// of all OLE objects of the specified object's class.
///
/// Pointer to an OLEUICONVERT structure that contains information used to initialize the dialog box.
///
/// Standard Success/Error Definitions
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_FALSE
/// Unknown failure (unused).
///
/// -
/// OLEUI_OK
/// The user pressed the OK button.
///
/// -
/// OLEUI_SUCCESS
/// No error, same as OLEUI_OK.
///
/// -
/// OLEUI_CANCEL
/// The user pressed the Cancel button.
///
///
/// Standard Field Validation Errors
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_ERR_STANDARDMIN
///
/// Errors common to all dialog boxes lie in the range OLEUI_ERR_STANDARDMIN to OLEUI_ERR_STANDARDMAX. This value allows the
/// application to test for standard messages in order to display error messages to the user.
///
///
/// -
/// OLEUI_ERR_STRUCTURENULL
/// The pointer to an OLEUIXXX structure passed into the function was NULL.
///
/// -
/// OLEUI_ERR_STRUCTUREINVALID
/// Insufficient permissions for read or write access to an OLEUIXXX structure.
///
/// -
/// OLEUI_ERR_CBSTRUCTINCORRECT
/// The cbstruct value is incorrect.
///
/// -
/// OLEUI_ERR_HWNDOWNERINVALID
/// The hWndOwner value is invalid.
///
/// -
/// OLEUI_ERR_LPSZCAPTIONINVALID
/// The lpszCaption value is invalid.
///
/// -
/// OLEUI_ERR_LPFNHOOKINVALID
/// The lpfnHook value is invalid.
///
/// -
/// OLEUI_ERR_HINSTANCEINVALID
/// The hInstance value is invalid.
///
/// -
/// OLEUI_ERR_LPSZTEMPLATEINVALID
/// The lpszTemplate value is invalid.
///
/// -
/// OLEUI_ERR_HRESOURCEINVALID
/// The hResource value is invalid.
///
///
/// Initialization Errors
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_ERR_FINDTEMPLATEFAILURE
/// Unable to find the dialog box template.
///
/// -
/// OLEUI_ERR_LOADTEMPLATEFAILURE
/// Unable to load the dialog box template.
///
/// -
/// OLEUI_ERR_DIALOGFAILURE
/// Dialog box initialization failed.
///
/// -
/// OLEUI_ERR_LOCALMEMALLOC
/// A call to LocalAlloc or the standard IMalloc allocator failed.
///
/// -
/// OLEUI_ERR_GLOBALMEMALLOC
/// A call to GlobalAlloc or the standard IMalloc allocator failed.
///
/// -
/// OLEUI_ERR_LOADSTRING
/// Unable to call LoadString for localized resources from the library.
///
/// -
/// OLEUI_ERR_OLEMEMALLOC
/// A call to the standard IMalloc allocator failed.
///
///
/// Function Specific Errors
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_ERR_STANDARDMAX
///
/// Errors common to all dialog boxes lie in the range OLEUI_ERR_STANDARDMIN to OLEUI_ERR_STANDARDMAX. This value allows the
/// application to test for standard messages in order to display error messages to the user.
///
///
/// -
/// OLEUI_CTERR_CLASSIDINVALID
/// A clsid value was invalid.
///
/// -
/// OLEUI_CTERR_DVASPECTINVALID
/// The dvAspect value was invalid. This member specifies the aspect of the object.
///
/// -
/// OLEUI_CTERR_CBFORMATINVALID
/// The wFormat value was invalid. This member specifies the data format of the object.
///
/// -
/// OLEUI_CTERR_STRINGINVALID
/// A string value (for example, lpszUserType or lpszDefLabel) was invalid.
///
///
///
///
///
/// OleUIConvert populates the Convert dialog box's list box with object classes by traversing the registry and
/// looking for entries in the Readable and ReadWritable keys. Every class that includes the original class' default file format in
/// its Readable key is added to the Convert list, and every class that includes the original class' default file format in its
/// ReadWritable key is added to the Activate As list. The Convert list is shown in the dialog box's list box when the
/// Convert radio button is selected (the default selection), and the Activate As list is shown when Activate As is selected.
///
/// Note that you can change the type of all objects of a given class only when CF_CONVERTONLY is not specified.
///
/// The convert command, which invokes this function, should only be made available to the user if OleUICanConvertOrActivateAs
/// returns S_OK.
///
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nf-oledlg-oleuiconverta UINT OleUIConvertA( LPOLEUICONVERTA Arg1 );
[DllImport(Lib_OleDlg, SetLastError = false, CharSet = CharSet.Auto)]
[PInvokeData("oledlg.h", MSDNShortId = "NF:oledlg.OleUIConvertA")]
public static extern uint OleUIConvert(in OLEUICONVERT Arg1);
/// Invokes the standard Links dialog box, allowing the user to make modifications to a container's linked objects.
/// Pointer to an OLEUIEDITLINKS structure that contains information used to initialize the dialog box.
///
/// Standard Success/Error Definitions
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_FALSE
/// Unknown failure (unused).
///
/// -
/// OLEUI_OK
/// The user pressed the OK button.
///
/// -
/// OLEUI_SUCCESS
/// No error, same as OLEUI_OK.
///
/// -
/// OLEUI_CANCEL
/// The user pressed the Cancel button.
///
///
/// Standard Field Validation Errors
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_ERR_STANDARDMIN
///
/// Errors common to all dialog boxes lie in the range OLEUI_ERR_STANDARDMIN to OLEUI_ERR_STANDARDMAX. This value allows the
/// application to test for standard messages in order to display error messages to the user.
///
///
/// -
/// OLEUI_ERR_STRUCTURENULL
/// The pointer to an OLEUIXXX structure passed into the function was NULL.
///
/// -
/// OLEUI_ERR_STRUCTUREINVALID
/// Insufficient permissions for read or write access to an OLEUIXXX structure.
///
/// -
/// OLEUI_ERR_CBSTRUCTINCORRECT
/// The cbstruct value is incorrect.
///
/// -
/// OLEUI_ERR_HWNDOWNERINVALID
/// The hWndOwner value is invalid.
///
/// -
/// OLEUI_ERR_LPSZCAPTIONINVALID
/// The lpszCaption value is invalid.
///
/// -
/// OLEUI_ERR_LPFNHOOKINVALID
/// The lpfnHook value is invalid.
///
/// -
/// OLEUI_ERR_HINSTANCEINVALID
/// The hInstance value is invalid.
///
/// -
/// OLEUI_ERR_LPSZTEMPLATEINVALID
/// The lpszTemplate value is invalid.
///
/// -
/// OLEUI_ERR_HRESOURCEINVALID
/// The hResource value is invalid.
///
///
/// Initialization Errors
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_ERR_FINDTEMPLATEFAILURE
/// Unable to find the dialog box template.
///
/// -
/// OLEUI_ERR_LOADTEMPLATEFAILURE
/// Unable to load the dialog box template.
///
/// -
/// OLEUI_ERR_DIALOGFAILURE
/// Dialog box initialization failed.
///
/// -
/// OLEUI_ERR_LOCALMEMALLOC
/// A call to LocalAlloc or the standard IMalloc allocator failed.
///
/// -
/// OLEUI_ERR_GLOBALMEMALLOC
/// A call to GlobalAlloc or the standard IMalloc allocator failed.
///
/// -
/// OLEUI_ERR_LOADSTRING
/// Unable to call LoadString for localized resources from the library.
///
/// -
/// OLEUI_ERR_OLEMEMALLOC
/// A call to the standard IMalloc allocator failed.
///
///
/// Function Specific Errors
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_ERR_STANDARDMAX
///
/// Errors common to all dialog boxes lie in the range OLEUI_ERR_STANDARDMIN to OLEUI_ERR_STANDARDMAX. This value allows the
/// application to test for standard messages in order to display error messages to the user.
///
///
///
///
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nf-oledlg-oleuieditlinksa UINT OleUIEditLinksA( LPOLEUIEDITLINKSA Arg1 );
[DllImport(Lib_OleDlg, SetLastError = false, CharSet = CharSet.Auto)]
[PInvokeData("oledlg.h", MSDNShortId = "NF:oledlg.OleUIEditLinksA")]
public static extern uint OleUIEditLinks(in OLEUIEDITLINKS Arg1);
///
/// Invokes the standard Insert Object dialog box, which allows the user to select an object source and class name, as well
/// as the option of displaying the object as itself or as an icon.
///
/// Pointer to the in-out OLEUIINSERTOBJECT structure for this dialog box.
///
/// Standard Success/Error Definitions
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_FALSE
/// Unknown failure (unused).
///
/// -
/// OLEUI_OK
/// The user pressed the OK button.
///
/// -
/// OLEUI_SUCCESS
/// No error, same as OLEUI_OK.
///
/// -
/// OLEUI_CANCEL
/// The user pressed the Cancel button.
///
///
/// Standard Field Validation Errors
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_ERR_STANDARDMIN
///
/// Errors common to all dialog boxes lie in the range OLEUI_ERR_STANDARDMIN to OLEUI_ERR_STANDARDMAX. This value allows the
/// application to test for standard messages in order to display error messages to the user.
///
///
/// -
/// OLEUI_ERR_STRUCTURENULL
/// The pointer to an OLEUIXXX structure passed into the function was NULL.
///
/// -
/// OLEUI_ERR_STRUCTUREINVALID
/// Insufficient permissions for read or write access to an OLEUIXXX structure.
///
/// -
/// OLEUI_ERR_CBSTRUCTINCORRECT
/// The cbstruct value is incorrect.
///
/// -
/// OLEUI_ERR_HWNDOWNERINVALID
/// The hWndOwner value is invalid.
///
/// -
/// OLEUI_ERR_LPSZCAPTIONINVALID
/// The lpszCaption value is invalid.
///
/// -
/// OLEUI_ERR_LPFNHOOKINVALID
/// The lpfnHook value is invalid.
///
/// -
/// OLEUI_ERR_HINSTANCEINVALID
/// The hInstance value is invalid.
///
/// -
/// OLEUI_ERR_LPSZTEMPLATEINVALID
/// The lpszTemplate value is invalid.
///
/// -
/// OLEUI_ERR_HRESOURCEINVALID
/// The hResource value is invalid.
///
///
/// Initialization Errors
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_ERR_FINDTEMPLATEFAILURE
/// Unable to find the dialog box template.
///
/// -
/// OLEUI_ERR_LOADTEMPLATEFAILURE
/// Unable to load the dialog box template.
///
/// -
/// OLEUI_ERR_DIALOGFAILURE
/// Dialog box initialization failed.
///
/// -
/// OLEUI_ERR_LOCALMEMALLOC
/// A call to LocalAlloc or the standard IMalloc allocator failed.
///
/// -
/// OLEUI_ERR_GLOBALMEMALLOC
/// A call to GlobalAlloc or the standard IMalloc allocator failed.
///
/// -
/// OLEUI_ERR_LOADSTRING
/// Unable to call LoadString for localized resources from the library.
///
/// -
/// OLEUI_ERR_OLEMEMALLOC
/// A call to the standard IMalloc allocator failed.
///
///
/// Function Specific Errors
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_ERR_STANDARDMAX
///
/// Errors common to all dialog boxes lie in the range OLEUI_ERR_STANDARDMIN to OLEUI_ERR_STANDARDMAX. This value allows the
/// application to test for standard messages in order to display error messages to the user.
///
///
/// -
/// OLEUI_IOERR_LPSZFILEINVALID
///
/// The lpszFile value is invalid or user has insufficient write access permissions.This lpszFile member points to the name of the
/// file linked to or inserted.
///
///
/// -
/// OLEUI_IOERR_PPVOBJINVALID
/// The ppvOjb value is invalid. This member points to the location where the pointer for the object is returned.
///
/// -
/// OLEUI_IOERR_LPIOLECLIENTSITEINVALID
/// The lpIOleClientSite value is invalid. This member points to the client site for the object.
///
/// -
/// OLEUI_IOERR_LPISTORAGEINVALID
/// The lpIStorage value is invalid. This member points to the storage to be used for the object.
///
/// -
/// OLEUI_IOERR_SCODEHASERROR
/// The sc member of lpIO has additional error information.
///
/// -
/// OLEUI_IOERR_LPCLSIDEXCLUDEINVALID
/// The lpClsidExclude value is invalid. This member contains the list of CLSIDs to exclude.
///
/// -
/// OLEUI_IOERR_CCHFILEINVALID
///
/// The cchFile or lpszFile value is invalid. The cchFile member specifies the size of the lpszFile buffer. The lpszFile member
/// points to the name of the file linked to or inserted.
///
///
///
///
///
///
/// OleUIInsertObject allows the user to select the type of object to be inserted from a list box containing the object
/// applications registered on the user's system. To populate that list box, OleUIInsertObject traverses the registry, adding
/// every object server it finds that meets the following criteria:
///
///
/// -
/// The registry entry does not include the NotInsertable key.
///
/// -
/// The registry entry includes an OLE 1.0 style Protocol\\StdFileEditing\\Server key.
///
/// -
/// The registry entry includes the Insertable key.
///
/// -
/// The object's CLSID is not included in the list of objects to exclude (the lpClsidExclude member of OLEUIINSERTOBJECT).
///
///
///
/// By default, OleUIInsertObject does not validate object servers, however, if the IOF_VERIFYSERVEREXIST flag is included in
/// the dwFlags member of the OLEUIINSERTOBJECT structure, OleUIInsertObject verifies that the server exists. If it does not
/// exist, then the server's object is not added to the list of available objects. Server validation is a time-extensive operation
/// and is a significant performance factor.
///
///
/// To free an HMETAFILEPICT returned from the Insert Object or Paste Special dialog box, delete the attached
/// metafile on the handle, as follows:
///
///
/// void FreeHmetafilepict(HMETAFILEPICT hmfp) { if (hmfp != NULL) { LPMETAFILEPICT pmfp = GlobalLock(hmfp); DeleteMetaFile(pmfp->hMF); GlobalUnlock(hmfp); GlobalFree(hmfp); } else { // Handle null pointers here. exit(0); } }
///
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nf-oledlg-oleuiinsertobjecta UINT OleUIInsertObjectA(
// LPOLEUIINSERTOBJECTA Arg1 );
[DllImport(Lib_OleDlg, SetLastError = false, CharSet = CharSet.Auto)]
[PInvokeData("oledlg.h", MSDNShortId = "NF:oledlg.OleUIInsertObjectA")]
public static extern uint OleUIInsertObject(ref OLEUIINSERTOBJECT Arg1);
///
/// Invokes the Object Properties dialog box, which displays General, View, and Link information about
/// an object.
///
/// Pointer to the OLEUIOBJECTPROPS structure.
///
/// Standard Success/Error Definitions
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_FALSE
/// Unknown failure (unused).
///
/// -
/// OLEUI_OK
/// The user pressed the OK button.
///
/// -
/// OLEUI_SUCCESS
/// No error, same as OLEUI_OK.
///
/// -
/// OLEUI_CANCEL
/// The user pressed the Cancel button.
///
///
/// Standard Field Validation Errors
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_ERR_STANDARDMIN
///
/// Errors common to all dialog boxes lie in the range OLEUI_ERR_STANDARDMIN to OLEUI_ERR_STANDARDMAX. This value allows the
/// application to test for standard messages in order to display error messages to the user.
///
///
/// -
/// OLEUI_ERR_STRUCTURENULL
/// The pointer to an OLEUIXXX structure passed into the function was NULL.
///
/// -
/// OLEUI_ERR_STRUCTUREINVALID
/// Insufficient permissions for read or write access to an OLEUIXXX structure.
///
/// -
/// OLEUI_ERR_CBSTRUCTINCORRECT
/// The cbstruct value is incorrect.
///
/// -
/// OLEUI_ERR_HWNDOWNERINVALID
/// The hWndOwner value is invalid.
///
/// -
/// OLEUI_ERR_LPSZCAPTIONINVALID
/// The lpszCaption value is invalid.
///
/// -
/// OLEUI_ERR_LPFNHOOKINVALID
/// The lpfnHook value is invalid.
///
/// -
/// OLEUI_ERR_HINSTANCEINVALID
/// The hInstance value is invalid.
///
/// -
/// OLEUI_ERR_LPSZTEMPLATEINVALID
/// The lpszTemplate value is invalid.
///
/// -
/// OLEUI_ERR_HRESOURCEINVALID
/// The hResource value is invalid.
///
///
/// Initialization Errors
/// Initialization Errors
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_ERR_FINDTEMPLATEFAILURE
/// Unable to find the dialog box template.
///
/// -
/// OLEUI_ERR_LOADTEMPLATEFAILURE
/// Unable to load the dialog box template.
///
/// -
/// OLEUI_ERR_DIALOGFAILURE
/// Dialog box initialization failed.
///
/// -
/// OLEUI_ERR_LOCALMEMALLOC
/// A call to LocalAlloc or the standard IMalloc allocator failed.
///
/// -
/// OLEUI_ERR_GLOBALMEMALLOC
/// A call to GlobalAlloc or the standard IMalloc allocator failed.
///
/// -
/// OLEUI_ERR_LOADSTRING
/// Unable to call LoadString for localized resources from the library.
///
/// -
/// OLEUI_ERR_OLEMEMALLOC
/// A call to the standard IMalloc allocator failed.
///
///
/// Function Specific Errors
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_ERR_STANDARDMAX
///
/// Errors common to all dialog boxes lie in the range OLEUI_ERR_STANDARDMIN to OLEUI_ERR_STANDARDMAX. This value allows the
/// application to test for standard messages in order to display error messages to the user.
///
///
/// -
/// OLEUI_OPERR_SUBPROPNULL
/// lpGP or lpVP is NULL, or dwFlags and OPF_OBJECTISLINK and lpLP are NULL.
///
/// -
/// OLEUI_OPERR_SUBPROPINVALID
/// Insufficient write-access permissions for the structures pointed to by lpGP, lpVP, or lpLP.
///
/// -
/// OLEUI_OPERR_PROPSHEETNULL
/// The lpLP value is NULL.
///
/// -
/// OLEUI_OPERR_PROPSHEETINVALID
/// Insufficient write-access permissions for the structures pointed to by lpGP, lpVP, or lpLP.
///
/// -
/// OLEUI_OPERR_SUPPROP
/// The sub-link property pointer, lpLP, is NULL.
///
/// -
/// OLEUI_OPERR_PROPSINVALID
/// Insufficient write access for the sub-link property pointer, lpLP.
///
/// -
/// OLEUI_OPERR_PAGESINCORRECT
/// Some sub-link properties of the lpPS member are incorrect.
///
/// -
/// OLEUI_OPERR_INVALIDPAGES
/// Some sub-link properties of the lpPS member are incorrect.
///
/// -
/// OLEUI_OPERR_NOTSUPPORTED
/// A sub-link property of the lpPS member is incorrect.
///
/// -
/// OLEUI_OPERR_DLGPROCNOTNULL
/// A sub-link property of the lpPS member is incorrect.
///
/// -
/// OLEUI_OPERR_LPARAMNOTZERO
/// A sub-link property of the lpPS member is incorrect.
///
/// -
/// OLEUI_GPERR_STRINGINVALID
/// A string value (for example, lplpszLabel or lplpszType) is invalid.
///
/// -
/// OLEUI_GPERR_CLASSIDINVALID
/// The clsid value is invalid.
///
/// -
/// OLEUI_GPERR_LPCLSIDEXCLUDEINVALID
/// The ClsidExcluded value is invalid.
///
/// -
/// OLEUI_GPERR_CBFORMATINVALID
/// The wFormat value is invalid.
///
/// -
/// OLEUI_VPERR_METAPICTINVALID
/// The hMetaPict value is invalid.
///
/// -
/// OLEUI_VPERR_DVASPECTINVALID
/// The dvAspect value is invalid.
///
/// -
/// OLEUI_OPERR_PROPERTYSHEET
/// The lpPS value is incorrect.
///
/// -
/// OLEUI_OPERR_OBJINFOINVALID
/// The lpObjInfo value is NULL or the calling process doesn't have read access.
///
/// -
/// OLEUI_OPERR_LINKINFOINVALID
/// The lpLinkInfo value is NULL or the calling process doesn't have read access.
///
///
///
///
/// OleUIObjectProperties is passed an OLEUIOBJECTPROPS structure, which supplies the information needed to fill in the
/// General, View, and Link tabs of the Object Properties dialog box.
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nf-oledlg-oleuiobjectpropertiesa UINT OleUIObjectPropertiesA(
// LPOLEUIOBJECTPROPSA Arg1 );
[DllImport(Lib_OleDlg, SetLastError = false, CharSet = CharSet.Auto)]
[PInvokeData("oledlg.h", MSDNShortId = "NF:oledlg.OleUIObjectPropertiesA")]
public static extern uint OleUIObjectProperties(ref OLEUIOBJECTPROPS Arg1);
///
/// Invokes the standard Paste Special dialog box, allowing the user to select the format of the clipboard object to be
/// pasted or paste-linked.
///
/// A pointer to an OLEUIPASTESPECIAL structure.
///
/// Standard Success/Error Definitions
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_FALSE
/// Unknown failure (unused).
///
/// -
/// OLEUI_OK
/// The user pressed the OK button.
///
/// -
/// OLEUI_SUCCESS
/// No error, same as OLEUI_OK.
///
/// -
/// OLEUI_CANCEL
/// The user pressed the Cancel button.
///
///
/// Standard Field Validation Errors
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_ERR_STANDARDMIN
///
/// Errors common to all dialog boxes lie in the range OLEUI_ERR_STANDARDMIN to OLEUI_ERR_STANDARDMAX. This value allows the
/// application to test for standard messages in order to display error messages to the user.
///
///
/// -
/// OLEUI_ERR_STRUCTURENULL
/// The pointer to an OLEUIXXX structure passed into the function was NULL.
///
/// -
/// OLEUI_ERR_STRUCTUREINVALID
/// Insufficient permissions for read or write access to an OLEUIXXX structure.
///
/// -
/// OLEUI_ERR_CBSTRUCTINCORRECT
/// The cbstruct value is incorrect.
///
/// -
/// OLEUI_ERR_HWNDOWNERINVALID
/// The hWndOwner value is invalid.
///
/// -
/// OLEUI_ERR_LPSZCAPTIONINVALID
/// The lpszCaption value is invalid.
///
/// -
/// OLEUI_ERR_LPFNHOOKINVALID
/// The lpfnHook value is invalid.
///
/// -
/// OLEUI_ERR_HINSTANCEINVALID
/// The hInstance value is invalid.
///
/// -
/// OLEUI_ERR_LPSZTEMPLATEINVALID
/// The lpszTemplate value is invalid.
///
/// -
/// OLEUI_ERR_HRESOURCEINVALID
/// The hResource value is invalid.
///
///
/// Initialization Errors
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_ERR_FINDTEMPLATEFAILURE
/// Unable to find the dialog box template.
///
/// -
/// OLEUI_ERR_LOADTEMPLATEFAILURE
/// Unable to load the dialog box template.
///
/// -
/// OLEUI_ERR_DIALOGFAILURE
/// Dialog box initialization failed.
///
/// -
/// OLEUI_ERR_LOCALMEMALLOC
/// A call to LocalAlloc or the standard IMalloc allocator failed.
///
/// -
/// OLEUI_ERR_GLOBALMEMALLOC
/// A call to GlobalAlloc or the standard IMalloc allocator failed.
///
/// -
/// OLEUI_ERR_LOADSTRING
/// Unable to call LoadString to get localized resources from the library.
///
/// -
/// OLEUI_ERR_OLEMEMALLOC
/// A call to the standard IMalloc allocator failed.
///
///
/// Function Specific Errors
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_ERR_STANDARDMAX
///
/// Errors common to all dialog boxes lie in the range OLEUI_ERR_STANDARDMIN to OLEUI_ERR_STANDARDMAX. This value allows the
/// application to test for standard messages in order to display error messages to the user.
///
///
/// -
/// OLEUI_IOERR_SRCDATAOBJECTINVALID
/// The lpSrcDataObject member of OLEUIPASTESPECIAL is invalid.
///
/// -
/// OLEUI_IOERR_ARRPASTEENTRIESINVALID
/// The arrPasteEntries member of OLEUIPASTESPECIAL is invalid.
///
/// -
/// OLEUI_IOERR_ARRLINKTYPESINVALID
/// The arrLinkTypes member of OLEUIPASTESPECIAL is invalid.
///
/// -
/// OLEUI_PSERR_CLIPBOARDCHANGED
/// The clipboard contents changed while the dialog box was displayed.
///
/// -
/// OLEUI_PSERR_GETCLIPBOAARDFAILED
/// The lpSrcDataObj member is incorrect.
///
///
///
///
///
/// The design of the Paste Special dialog box assumes that if you are willing to permit a user to link to an object, you are
/// also willing to permit the user to embed that object. For this reason, if any of the OLEUIPASTE_LINKTYPE flags associated with
/// the OLEUIPASTEFLAG enumeration are set, then the OLEUIPASTE_PASTE flag must also be set in order for the data formats to appear
/// in the Paste Special dialog box.
///
///
/// The text displayed in the Source field of the standard Paste Special dialog box, which is implemented in
/// Oledlg32.dll, is the null-terminated string whose offset in bytes is specified in the dwSrcofCopy member of the
/// OBJECTDESCRIPTOR structure for the object to be pasted. If an OBJECTDESCRIPTOR structure is not available for this
/// object, the dialog box displays whatever text may be associated with CF_LINKSOURCEDESCRIPTOR. If neither structure is available,
/// the dialog box looks for CF_FILENAME. If CF_FILENAME is not found, the dialog box displays the string "Unknown Source".
///
///
/// To free an HMETAFILEPICT returned from the Insert Object or Paste Special dialog box, delete the attached
/// metafile on the handle, as follows.
///
///
/// void FreeHmetafilepict(HMETAFILEPICT hmfp) { if (hmfp != NULL) { LPMETAFILEPICT pmfp = GlobalLock(hmfp); DeleteMetaFile(pmfp->hMF); GlobalUnlock(hmfp); GlobalFree(hmfp); } else { // Handle null pointers here. exit(0); } } // FreeHmetafilepict
///
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nf-oledlg-oleuipastespeciala UINT OleUIPasteSpecialA(
// LPOLEUIPASTESPECIALA Arg1 );
[DllImport(Lib_OleDlg, SetLastError = false, CharSet = CharSet.Auto)]
[PInvokeData("oledlg.h", MSDNShortId = "NF:oledlg.OleUIPasteSpecialA")]
public static extern uint OleUIPasteSpecial(ref OLEUIPASTESPECIAL Arg1);
///
/// Displays a dialog box with the specified template and returns the response (button identifier) from the user. This function is
/// used to display OLE warning messages, for example, Class Not Registered.
///
/// The resource number of the dialog box to be displayed. See Remarks.
/// The handle to the parent window of the dialog box.
///
/// Optional. The title of the dialog box followed by a list of arguments for the format string in the static control (IDC_PU_TEXT)
/// of the dialog box. The caller must be sure to pass the correct number and types of arguments.
///
///
/// Standard Success/Error Definitions
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_FALSE
/// Unknown failure (unused).
///
/// -
/// OLEUI_OK
/// The user pressed the OK button.
///
/// -
/// OLEUI_SUCCESS
/// No error, same as OLEUI_OK.
///
/// -
/// OLEUI_CANCEL
/// The user pressed the Cancel button.
///
///
/// Standard Field Validation Errors
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_ERR_STANDARDMIN
///
/// Errors common to all dialog boxes lie in the range OLEUI_ERR_STANDARDMIN to OLEUI_ERR_STANDARDMAX. This value allows the
/// application to test for standard messages in order to display error messages to the user.
///
///
/// -
/// OLEUI_ERR_STRUCTURENULL
/// The pointer to an OLEUIXXX structure passed into the function was NULL.
///
/// -
/// OLEUI_ERR_STRUCTUREINVALID
/// Insufficient permissions for read or write access to an OLEUIXXX structure.
///
/// -
/// OLEUI_ERR_CBSTRUCTINCORRECT
/// The cbstruct value is incorrect.
///
/// -
/// OLEUI_ERR_HWNDOWNERINVALID
/// The hWndOwner value is invalid.
///
/// -
/// OLEUI_ERR_LPSZCAPTIONINVALID
/// The lpszCaption value is invalid.
///
/// -
/// OLEUI_ERR_LPFNHOOKINVALID
/// The lpfnHook value is invalid.
///
/// -
/// OLEUI_ERR_HINSTANCEINVALID
/// The hInstance value is invalid.
///
/// -
/// OLEUI_ERR_LPSZTEMPLATEINVALID
/// The lpszTemplate value is invalid.
///
/// -
/// OLEUI_ERR_HRESOURCEINVALID
/// The hResource value is invalid.
///
///
/// Initialization Errors
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_ERR_FINDTEMPLATEFAILURE
/// Unable to find the dialog box template.
///
/// -
/// OLEUI_ERR_LOADTEMPLATEFAILURE
/// Unable to load the dialog box template.
///
/// -
/// OLEUI_ERR_DIALOGFAILURE
/// Dialog box initialization failed.
///
/// -
/// OLEUI_ERR_LOCALMEMALLOC
/// A call to LocalAlloc or the standard IMalloc allocator failed.
///
/// -
/// OLEUI_ERR_GLOBALMEMALLOC
/// A call to GlobalAlloc or the standard IMalloc allocator failed.
///
/// -
/// OLEUI_ERR_LOADSTRING
/// Unable to call LoadString for localized resources from the library.
///
/// -
/// OLEUI_ERR_OLEMEMALLOC
/// A call to the standard IMalloc allocator failed.
///
///
/// Function Specific Errors
///
///
/// Return code
/// Description
///
/// -
/// OLEUI_ERR_STANDARDMAX
///
/// Errors common to all dialog boxes lie in the range OLEUI_ERR_STANDARDMIN to OLEUI_ERR_STANDARDMAX. This value allows the
/// application to test for standard messages in order to display error messages to the user.
///
///
///
///
///
///
/// The following dialog box templates are defined in Windows Interface Guidelines--A Guide for Designing Software. The nTemplate
/// parameter must be a currently defined resource, however, additional templates can be added to prompt.dlg.
///
///
/// IDD_LINKSOURCEUNAVAILABLE IDD_CANNOTUPDATELINK IDD_SERVERNOTREG IDD_CANNOTRESPONDVERB IDD_SERVERNOTFOUND
///
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nf-oledlg-oleuipromptusera int OleUIPromptUserA( int nTemplate, HWND
// hwndParent, ... );
[DllImport(Lib_OleDlg, SetLastError = false, CharSet = CharSet.Auto)]
[PInvokeData("oledlg.h", MSDNShortId = "NF:oledlg.OleUIPromptUserA")]
public static extern int OleUIPromptUser(int nTemplate, HWND hwndParent, IntPtr args);
///
/// Updates all links in the link container and displays a dialog box that shows the progress of the updating process. The process
/// is stopped if the user presses the Stop button or when all links are processed.
///
/// Pointer to the IOleUILinkContainer interface on the link container.
/// Parent window of the dialog box.
/// Pointer to the title of the dialog box.
/// Total number of links.
/// Returns TRUE if the links were successfully updated; otherwise, FALSE.
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/nf-oledlg-oleuiupdatelinksa BOOL OleUIUpdateLinksA(
// LPOLEUILINKCONTAINERA lpOleUILinkCntr, HWND hwndParent, LPSTR lpszTitle, int cLinks );
[DllImport(Lib_OleDlg, SetLastError = false, CharSet = CharSet.Auto)]
[PInvokeData("oledlg.h", MSDNShortId = "NF:oledlg.OleUIUpdateLinksA")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool OleUIUpdateLinks(IOleUILinkContainer lpOleUILinkCntr, HWND hwndParent, [MarshalAs(UnmanagedType.LPTStr)] string lpszTitle,
int cLinks);
///
/// Contains information that the OLE User Interface Library uses to initialize the Busy dialog box, and space for the
/// library to return information when the dialog box is dismissed.
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/ns-oledlg-oleuibusya typedef struct tagOLEUIBUSYA { DWORD cbStruct;
// DWORD dwFlags; HWND hWndOwner; LPCSTR lpszCaption; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; HINSTANCE hInstance; LPCSTR
// lpszTemplate; HRSRC hResource; HTASK hTask; HWND *lphWndDialog; } OLEUIBUSYA, *POLEUIBUSYA, *LPOLEUIBUSYA;
[PInvokeData("oledlg.h", MSDNShortId = "NS:oledlg.tagOLEUIBUSYA")]
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct OLEUIBUSY
{
/// The size of the structure, in bytes. This field must be filled on input.
public uint cbStruct;
///
///
/// On input, specifies the initialization and creation flags. On exit, it specifies the user's choices. It may be a combination
/// of the following flags.
///
///
///
/// Value
/// Meaning
///
/// -
/// BZ_DISABLECANCELBUTTON
/// This flag disables the Cancel button.
///
/// -
/// BZ_DISABLESWITCHTOBUTTON
/// Input only. This flag disables the Switch To... button.
///
/// -
/// BZ_DISABLERETRYBUTTON
/// Input only. This flag disables the Retry button.
///
/// -
/// BZ_NOTRESPONDINGDIALOG
///
/// Input only. This flag generates a Not Responding dialog box instead of a Busy dialog box. The text is slightly different,
/// and the Cancel button is disabled.
///
///
///
///
public BZ dwFlags;
/// The window that owns the dialog box. This member should not be NULL.
public HWND hWndOwner;
/// A pointer to a string to be used as the title of the dialog box. If NULL, then the library uses Busy.
[MarshalAs(UnmanagedType.LPTStr)]
public string lpszCaption;
///
/// Pointer to a hook function that processes messages intended for the dialog box. The hook function must return zero to pass a
/// message that it didn't process back to the dialog box procedure in the library. The hook function must return a nonzero
/// value to prevent the library's dialog box procedure from processing a message it has already processed.
///
[MarshalAs(UnmanagedType.FunctionPtr)]
public LPFNOLEUIHOOK lpfnHook;
///
/// Application-defined data that the library passes to the hook function pointed to by the lpfnHook member. The library
/// passes a pointer to the OLEUIBUSY structure in the lParam parameter of the WM_INITDIALOG message; this pointer can be
/// used to retrieve the lCustData member.
///
public IntPtr lCustData;
/// Instance that contains a dialog box template specified by the lpTemplateName member.
public HINSTANCE hInstance;
///
/// Pointer to a null-terminated string that specifies the name of the resource file for the dialog box template that is to be
/// substituted for the library's Busy dialog box template.
///
[MarshalAs(UnmanagedType.LPTStr)]
public string lpszTemplate;
/// Customized template handle.
public HRSRC hResource;
/// Input only. Handle to the task that is blocking.
public HTASK hTask;
/// Pointer to the dialog box's HWND.
public IntPtr lphWndDialog;
}
///
/// Contains information that the OLE User Interface Library uses to initialize the Change Icon dialog box, and it contains
/// space for the library to return information when the dialog box is dismissed.
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/ns-oledlg-oleuichangeicona typedef struct tagOLEUICHANGEICONA { DWORD
// cbStruct; DWORD dwFlags; HWND hWndOwner; LPCSTR lpszCaption; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; HINSTANCE hInstance;
// LPCSTR lpszTemplate; HRSRC hResource; HGLOBAL hMetaPict; CLSID clsid; CHAR szIconExe[MAX_PATH]; int cchIconExe; }
// OLEUICHANGEICONA, *POLEUICHANGEICONA, *LPOLEUICHANGEICONA;
[PInvokeData("oledlg.h", MSDNShortId = "NS:oledlg.tagOLEUICHANGEICONA")]
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct OLEUICHANGEICON
{
/// The size of the structure, in bytes. This field must be filled on input.
public uint cbStruct;
///
///
/// On input, specifies the initialization and creation flags. On exit, it specifies the user's choices. It can be a combination
/// of the following flags.
///
///
///
/// Value
/// Meaning
///
/// -
/// CIF_SHOWHELP
/// Dialog box will display a Help button.
///
/// -
/// CIF_SELECTCURRENT
/// On input, selects the Current radio button on initialization. On exit, specifies that the user selected Current.
///
/// -
/// CIF_SELECTDEFAULT
/// On input, selects the Default radio button on initialization. On exit, specifies that the user selected Default.
///
/// -
/// CIF_SELECTFROMFILE
/// On input, selects the From File radio button on initialization. On exit, specifies that the user selected From File.
///
/// -
/// CIF_USEICONEXE
///
/// Input only. Extracts the icon from the executable specified in the szIconExe member, instead of retrieving it from the
/// class. This is useful for OLE embedding or linking to non-OLE files.
///
///
///
///
public CIF dwFlags;
/// The window that owns the dialog box. This member should not be NULL.
public HWND hWndOwner;
///
/// Pointer to a string to be used as the title of the dialog box. If NULL, then the library uses Change Icon.
///
[MarshalAs(UnmanagedType.LPTStr)]
public string lpszCaption;
///
/// Pointer to a hook function that processes messages intended for the dialog box. The hook function must return zero to pass a
/// message that it didn't process back to the dialog box procedure in the library. The hook function must return a nonzero
/// value to prevent the library's dialog box procedure from processing a message it has already processed.
///
[MarshalAs(UnmanagedType.FunctionPtr)]
public LPFNOLEUIHOOK lpfnHook;
///
/// Application-defined data that the library passes to the hook function pointed to by the lpfnHook member. The library
/// passes a pointer to the OLEUICHANGEICON structure in the lParam parameter of the WM_INITDIALOG message; this pointer
/// can be used to retrieve the lCustData member.
///
public IntPtr lCustData;
/// Instance that contains a dialog box template specified by the lpTemplateName member.
public HINSTANCE hInstance;
///
/// Pointer to a null-terminated string that specifies the name of the resource file for the dialog box template that is to be
/// substituted for the library's Change Icon dialog box template.
///
[MarshalAs(UnmanagedType.LPTStr)]
public string lpszTemplate;
/// Customized template handle.
public HRSRC hResource;
/// Current and final image. The source of the icon is embedded in the metafile itself.
public HGLOBAL hMetaPict;
/// Input only. The class to use to get the Default icon.
public Guid clsid;
///
/// Input only. Pointer to the executable to extract the default icon from. This member is ignored unless CIF_USEICONEXE is
/// included in the dwFlags member and an attempt to retrieve the class icon from the specified CLSID fails.
///
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH)]
public string szIconExe;
///
/// Input only. The number of characters in szIconExe. This member is ignored unless CIF_USEICONEXE is included in the
/// dwFlags member.
///
public int cchIconExe;
}
///
/// Contains information that is used to initialize the standard Change Source dialog box. It allows the user to modify the
/// destination or source of a link. This may simply entail selecting a different file name for the link, or possibly changing the
/// item reference within the file, for example, changing the destination range of cells within the spreadsheet that the link is to.
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/ns-oledlg-oleuichangesourcea typedef struct tagOLEUICHANGESOURCEA {
// DWORD cbStruct; DWORD dwFlags; HWND hWndOwner; LPCSTR lpszCaption; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; HINSTANCE hInstance;
// LPCSTR lpszTemplate; HRSRC hResource; OPENFILENAMEA *lpOFN; DWORD dwReserved1[4]; LPOLEUILINKCONTAINERA lpOleUILinkContainer;
// DWORD dwLink; LPSTR lpszDisplayName; ULONG nFileLength; LPSTR lpszFrom; LPSTR lpszTo; } OLEUICHANGESOURCEA, *POLEUICHANGESOURCEA, *LPOLEUICHANGESOURCEA;
[PInvokeData("oledlg.h", MSDNShortId = "NS:oledlg.tagOLEUICHANGESOURCEA")]
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct OLEUICHANGESOURCE
{
/// The size of the structure, in bytes.
public uint cbStruct;
///
///
/// On input, this field specifies the initialization and creation flags. On exit, it specifies the user's choices. It may be a
/// combination of the following flags.
///
///
///
/// Value
/// Meaning
///
/// -
/// CSF_SHOWHELP
/// Enables or shows the Help button.
///
/// -
/// CSF_VALIDSOURCE
/// Indicates that the link was validated.
///
/// -
/// CSF_ONLYGETSOURCE
///
/// Disables automatic validation of the link source when the user presses OK. If you specify this flag, you should validate the
/// source when the dialog box returns OK.
///
///
///
///
public CSF dwFlags;
/// The window that owns the dialog box.
public HWND hWndOwner;
///
/// Pointer to a string to be used as the title of the dialog box. If NULL, then the library uses Change Source.
///
[MarshalAs(UnmanagedType.LPTStr)]
public string lpszCaption;
///
/// Pointer to a hook function that processes messages intended for the dialog box. The hook function must return zero to pass a
/// message that it didn't process back to the dialog box procedure in the library. The hook function must return a nonzero
/// value to prevent the library's dialog box procedure from processing a message it has already processed.
///
[MarshalAs(UnmanagedType.FunctionPtr)]
public LPFNOLEUIHOOK lpfnHook;
///
/// Application-defined data that the library passes to the hook function pointed to by the OLEUICHANGEICON structure in the
/// lParam parameter of the WM_INITDIALOG message; this pointer can be used to retrieve the lCustData member.
///
public IntPtr lCustData;
///
/// Instance that contains a dialog box template specified by the lpszTemplate member. This member is ignored if the
/// lpszTemplate member is NULL or invalid.
///
public HINSTANCE hInstance;
///
/// Pointer to a null-terminated string that specifies the name of the resource file for the dialog box template that is to be
/// substituted for the library's Convert dialog box template.
///
[MarshalAs(UnmanagedType.LPTStr)]
public string lpszTemplate;
///
/// Resource handle for a custom dialog box. If this member is NULL, then the library uses the standard Convert
/// dialog box template, or if it is valid, the template named by the lpszTemplate member.
///
public HRSRC hResource;
///
/// Pointer to the OPENFILENAME structure, which contains information used by the operating system to initialize the
/// system-defined Open or Save As dialog boxes.
///
public IntPtr lpOFN;
/// This member is reserved.
public Guid dwReserved1;
///
/// Pointer to the container's implementation of the interface, used to validate the link
/// source. The Edit Links dialog box uses this to allow the container to manipulate its links.
///
public IntPtr lpOleUILinkContainer;
/// Container-defined unique link identifier used to validate link sources. Used by lpOleUILinkContainer.
public uint dwLink;
/// Pointer to the complete source display name.
[MarshalAs(UnmanagedType.LPTStr)]
public string lpszDisplayName;
/// File moniker portion of lpszDisplayName.
public uint nFileLength;
/// Pointer to the prefix of the source that was changed from.
[MarshalAs(UnmanagedType.LPTStr)]
public string lpszFrom;
/// Pointer to the prefix of the source to be changed to.
[MarshalAs(UnmanagedType.LPTStr)]
public string lpszTo;
}
///
/// Contains information that the OLE User Interface Library uses to initialize the Convert dialog box, and space for the
/// library to return information when the dialog box is dismissed.
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/ns-oledlg-oleuiconverta typedef struct tagOLEUICONVERTA { DWORD
// cbStruct; DWORD dwFlags; HWND hWndOwner; LPCSTR lpszCaption; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; HINSTANCE hInstance;
// LPCSTR lpszTemplate; HRSRC hResource; CLSID clsid; CLSID clsidConvertDefault; CLSID clsidActivateDefault; CLSID clsidNew; DWORD
// dvAspect; WORD wFormat; BOOL fIsLinkedObject; HGLOBAL hMetaPict; LPSTR lpszUserType; BOOL fObjectsIconChanged; LPSTR
// lpszDefLabel; UINT cClsidExclude; LPCLSID lpClsidExclude; } OLEUICONVERTA, *POLEUICONVERTA, *LPOLEUICONVERTA;
[PInvokeData("oledlg.h", MSDNShortId = "NS:oledlg.tagOLEUICONVERTA")]
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct OLEUICONVERT
{
/// The size of the structure, in bytes. This member must be filled on input.
public uint cbStruct;
///
///
/// On input, this field specifies the initialization and creation flags. On exit, it specifies the user's choices. It may be a
/// combination of the following flags.
///
///
///
/// Value
/// Meaning
///
/// -
/// CF_SHOWHELPBUTTON
/// Dialog box will display a Help button. This flag is set on input.
///
/// -
/// CF_SETCONVERTDEFAULT
///
/// Class whose CLSID is specified by clsidConvertDefault will be used as the default selection. This selection appears in the
/// class listbox when the Convert To radio button is selected. This flag is set on input.
///
///
/// -
/// CF_SETACTIVATEDEFAULT
///
/// Class whose CLSID is specified by clsidActivateDefault will be used as the default selection. This selection appears in the
/// class listbox when the Activate As radio button is selected. This flag is set on input.
///
///
/// -
/// CF_SELECTCONVERTTO
///
/// On input, this flag specifies that Convert To will be initially selected (default behavior). This flag is set on output if
/// Convert To was selected when the user dismissed the dialog box.
///
///
/// -
/// CF_SELECTACTIVATEAS
///
/// On input, this flag specifies that Activate As will be initially selected. This flag is set on output if Activate As was
/// selected when the user dismissed the dialog box.
///
///
/// -
/// CF_DISABLEDISPLAYASICON
/// The Display As Icon button will be disabled on initialization.
///
/// -
/// CF_DISABLEACTIVATEAS
/// The Activate As radio button will be disabled on initialization.
///
/// -
/// CF_HIDECHANGEICON
/// The Change Icon button will be hidden in the Convert dialog box.
///
/// -
/// CF_CONVERTONLY
/// The Activate As radio button will be disabled in the Convert dialog box.
///
///
///
public CF dwFlags;
/// The window that owns the dialog box. This member should not be NULL.
public HWND hWndOwner;
/// Pointer to a string to be used as the title of the dialog box. If NULL, then the library uses Convert.
[MarshalAs(UnmanagedType.LPTStr)]
public string lpszCaption;
///
/// Pointer to a hook function that processes messages intended for the dialog box. The hook function must return zero to pass a
/// message that it didn't process back to the dialog box procedure in the library. The hook function must return a nonzero
/// value to prevent the library's dialog box procedure from processing a message it has already processed.
///
public LPFNOLEUIHOOK lpfnHook;
///
/// Application-defined data that the library passes to the hook function pointed to by the lpfnHook member. The library
/// passes a pointer to the OLEUICONVERT structure in the lParam parameter of the WM_INITDIALOG message; this pointer can
/// be used to retrieve the lCustData member.
///
public IntPtr lCustData;
///
/// Instance that contains a dialog box template specified by the lpszTemplate member. This member is ignored if the
/// lpszTemplate member is NULL or invalid.
///
public HINSTANCE hInstance;
///
/// Pointer to a null-terminated string that specifies the name of the resource file for the dialog box template that is to be
/// substituted for the library's Convert dialog box template.
///
[MarshalAs(UnmanagedType.LPTStr)]
public string lpszTemplate;
///
/// Resource handle for a custom dialog box. If this member is NULL, then the library uses the standard Convert
/// dialog box template, or if it is valid, the template named by the lpszTemplate member.
///
public HRSRC hResource;
/// The CLSID of the object to be converted or activated. This member is set on input.
public Guid clsid;
///
/// The CLSID to use as the default class when Convert To is selected. This member is ignored if the dwFlags
/// member does not include CF_SETCONVERTDEFAULT. This member is set on input.
///
public Guid clsidConvertDefault;
///
/// The CLSID to use as the default class when Activate As is selected. This member is ignored if the dwFlags
/// member does not include CF_SETACTIVATEDEFAULT. This member is set on input.
///
public Guid clsidActivateDefault;
/// The CLSID of the selected class. This member is set on output.
public Guid clsidNew;
///
/// Aspect of the object. This must be either DVASPECT_CONTENT or DVASPECT_ICON. If dvAspect is DVASPECT_ICON on input,
/// then the Display As Icon box is checked and the object's icon is displayed. This member is set on input and output.
/// For more information, see DVASPECT.
///
public DVASPECT dvAspect;
/// Data format of the object to be converted or activated.
public ushort wFormat;
/// TRUE if the object is linked. This member is set on input.
[MarshalAs(UnmanagedType.Bool)]
public bool fIsLinkedObject;
/// The METAFILEPICT containing the iconic aspect. This member is set on input and output.
public HGLOBAL hMetaPict;
///
/// Pointer to the User Type name of the object to be converted or activated. If this value is NULL, then the dialog box
/// will retrieve the User Type name from the registry. This string is freed on exit.
///
[MarshalAs(UnmanagedType.LPTStr)]
public string lpszUserType;
///
/// TRUE if the object's icon changed. (that is, if OleUIChangeIcon was called and not canceled.). This member is set on output.
///
[MarshalAs(UnmanagedType.Bool)]
public bool fObjectsIconChanged;
///
/// Pointer to the default label to use for the icon. If NULL, the short user type name will be used. If the object is a
/// link, the caller should pass the display name of the link source. This is freed on exit.
///
[MarshalAs(UnmanagedType.LPTStr)]
public string lpszDefLabel;
/// Number of CLSIDs in lpClsidExclude.
public uint cClsidExclude;
/// Pointer to the list of CLSIDs to exclude from the list.
public IntPtr lpClsidExclude;
}
///
/// Contains information that the OLE User Interface Library uses to initialize the Edit Links dialog box, and contains space
/// for the library to return information when the dialog box is dismissed.
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/ns-oledlg-oleuieditlinksa typedef struct tagOLEUIEDITLINKSA { DWORD
// cbStruct; DWORD dwFlags; HWND hWndOwner; LPCSTR lpszCaption; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; HINSTANCE hInstance;
// LPCSTR lpszTemplate; HRSRC hResource; LPOLEUILINKCONTAINERA lpOleUILinkContainer; } OLEUIEDITLINKSA, *POLEUIEDITLINKSA, *LPOLEUIEDITLINKSA;
[PInvokeData("oledlg.h", MSDNShortId = "NS:oledlg.tagOLEUIEDITLINKSA")]
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct OLEUIEDITLINKS
{
/// The size of the structure, in bytes. This member must be filled on input.
public uint cbStruct;
///
///
/// On input, dwFlags specifies the initialization and creation flags. It may be a combination of the following flags.
///
///
///
/// Value
/// Meaning
///
/// -
/// ELF_SHOWHELP
/// Specifies that the dialog box will display a Help button.
///
/// -
/// ELF_DISABLEUPDATENOW
/// Specifies that the Update Now button will be disabled on initialization.
///
/// -
/// ELF_DISABLEOPENSOURCE
/// Specifies that the Open Source button will be disabled on initialization.
///
/// -
/// ELF_DISABLECHANGESOURCE
/// Specifies that the Change Source button will be disabled on initialization.
///
/// -
/// ELF_DISABLECANCELLINK
/// Specifies that the Cancel Link button will be disabled on initialization.
///
///
///
public ELF dwFlags;
/// The window that owns the dialog box. This member should not be NULL.
public HWND hWndOwner;
/// Pointer to a string to be used as the title of the dialog box. If NULL, then the library uses Links.
[MarshalAs(UnmanagedType.LPTStr)]
public string lpszCaption;
///
/// Pointer to a hook function that processes messages intended for the dialog box. The hook function must return zero to pass a
/// message that it didn't process back to the dialog box procedure in the library. The hook function must return a nonzero
/// value to prevent the library's dialog box procedure from processing a message it has already processed.
///
public LPFNOLEUIHOOK lpfnHook;
///
/// Application-defined data that the library passes to the hook function pointed to by the lpfnHook member. The library
/// passes a pointer to the OLEUIEDITLINKS structure in the lParam parameter of the WM_INITDIALOG message; this pointer
/// can be used to retrieve the lCustData member.
///
public IntPtr lCustData;
/// Instance that contains a dialog box template specified by the lpTemplateName member.
public HINSTANCE hInstance;
///
/// Pointer to a null-terminated string that specifies the name of the resource file for the dialog box template that is to be
/// substituted for the library's Edit Links dialog box template.
///
[MarshalAs(UnmanagedType.LPTStr)]
public string lpszTemplate;
/// Customized template handle.
public HRSRC hResource;
///
/// Pointer to the container's implementation of the IOleUILinkContainer Interface. The Edit Links dialog box uses this
/// to allow the container to manipulate its links.
///
public IOleUILinkContainer lpOleUILinkContainer;
}
///
/// Initializes the General tab of the Object Properties dialog box. A reference to it is passed in as part of the
/// OLEUIOBJECTPROPS structure to the OleUIObjectProperties function. This tab shows the type and size of an OLE embedding and
/// allows it the user to tunnel to the Convert dialog box. This tab also shows the link destination if the object is a link.
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/ns-oledlg-oleuignrlpropsa typedef struct tagOLEUIGNRLPROPSA { DWORD
// cbStruct; DWORD dwFlags; DWORD dwReserved1[2]; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; DWORD dwReserved2[3]; struct
// tagOLEUIOBJECTPROPSA *lpOP; } OLEUIGNRLPROPSA, *POLEUIGNRLPROPSA, *LPOLEUIGNRLPROPSA;
[PInvokeData("oledlg.h", MSDNShortId = "NS:oledlg.tagOLEUIGNRLPROPSA")]
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct OLEUIGNRLPROPS
{
/// The size of the structure, in bytes. This field must be filled on input.
public uint cbStruct;
/// Currently no flags associated with this member. It should be set to 0 (zero).
public uint dwFlags;
/// This member is reserved.
public ulong dwReserved1;
///
/// Pointer to a hook function that processes messages intended for the dialog box. The hook function must return zero to pass a
/// message that it didn't process back to the dialog box procedure in the library. The hook function must return a nonzero
/// value to prevent the library's dialog box procedure from processing a message it has already processed.
///
public LPFNOLEUIHOOK lpfnHook;
///
/// Application-defined data that the library passes to the hook function pointed to by the lpfnHook member during WM_INITDIALOG.
///
public IntPtr lCustData;
/// This member is reserved.
public uint dwReserved2_1;
/// This member is reserved.
public uint dwReserved2_2;
/// This member is reserved.
public uint dwReserved2_3;
/// Used internally.
public IntPtr lpOP;
}
///
/// Contains information that the OLE User Interface Library uses to initialize the Insert Object dialog box, and space for
/// the library to return information when the dialog box is dismissed.
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/ns-oledlg-oleuiinsertobjecta typedef struct tagOLEUIINSERTOBJECTA {
// DWORD cbStruct; DWORD dwFlags; HWND hWndOwner; LPCSTR lpszCaption; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; HINSTANCE hInstance;
// LPCSTR lpszTemplate; HRSRC hResource; CLSID clsid; LPSTR lpszFile; UINT cchFile; UINT cClsidExclude; LPCLSID lpClsidExclude; IID
// iid; DWORD oleRender; LPFORMATETC lpFormatEtc; LPOLECLIENTSITE lpIOleClientSite; LPSTORAGE lpIStorage; LPVOID *ppvObj; SCODE sc;
// HGLOBAL hMetaPict; } OLEUIINSERTOBJECTA, *POLEUIINSERTOBJECTA, *LPOLEUIINSERTOBJECTA;
[PInvokeData("oledlg.h", MSDNShortId = "NS:oledlg.tagOLEUIINSERTOBJECTA")]
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct OLEUIINSERTOBJECT
{
/// The size of the structure, in bytes. This field must be filled on input.
public uint cbStruct;
///
///
/// On input, specifies the initialization and creation flags. On exit, specifies the user's choices. It can be a combination of
/// the following flags.
///
///
///
/// Value
/// Meaning
///
/// -
/// IOF_SHOWHELP
/// The dialog box will display a Help button.
///
/// -
/// IOF_SELECTCREATENEW
/// The Create New radio button will initially be checked. This cannot be used with IOF_SELECTCREATEFROMFILE.
///
/// -
/// IOF_SELECTCREATEFROMFILE
/// The Create From File radio button will initially be checked. This cannot be used with IOF_SELECTCREATENEW.
///
/// -
/// IOF_CHECKLINK
/// The Link check box will initially be checked.
///
/// -
/// IOF_CHECKDISPLAYASICON
///
/// The Display As Icon check box will initially be checked, the current icon will be displayed, and the Change Icon button will
/// be enabled.
///
///
/// -
/// IOF_CREATENEWOBJECT
///
/// A new object should be created when the user selects OK to dismiss the dialog box and the Create New radio button was selected.
///
///
/// -
/// IOF_CREATEFILEOBJECT
///
/// A new object should be created from the specified file when the user selects OK to dismiss the dialog box and the Create
/// From File radio button was selected.
///
///
/// -
/// IOF_CREATELINKOBJECT
///
/// A new linked object should be created when the user selects OK to dismiss the dialog box and the user checked the Link check box.
///
///
/// -
/// IOF_DISABLELINK
/// The Link check box will be disabled on initialization.
///
/// -
/// IOF_VERIFYSERVERSEXIST
///
/// The dialog box should validate the classes it adds to the listbox by ensuring that the server specified in the registration
/// database exists. This is a significant performance factor.
///
///
/// -
/// IOF_DISABLEDISPLAYASICON
/// The Display As Icon check box will be disabled on initialization.
///
/// -
/// IOF_HIDECHANGEICON
/// The Change Icon button will be hidden in the Insert Object dialog box.
///
/// -
/// IOF_SHOWINSERTCONTROL
/// Displays the Insert Control radio button.
///
/// -
/// IOF_SELECTCREATECONTROL
/// Displays the Create Control radio button.
///
///
///
public IOF dwFlags;
/// The window that owns the dialog box. This member should not be NULL.
public HWND hWndOwner;
///
/// Pointer to a string to be used as the title of the dialog box. If NULL, then the library uses Insert Object.
///
[MarshalAs(UnmanagedType.LPTStr)]
public string lpszCaption;
///
/// Pointer to a hook function that processes messages intended for the dialog box. The hook function must return zero to pass a
/// message that it didn't process back to the dialog box procedure in the library. The hook function must return a nonzero
/// value to prevent the library's dialog box procedure from processing a message it has already processed.
///
public LPFNOLEUIHOOK lpfnHook;
///
/// Application-defined data that the library passes to the hook function pointed to by the lpfnHook member. The library
/// passes a pointer to the OLEUIINSERTOBJECT structure in the lParam parameter of the WM_INITDIALOG message; this
/// pointer can be used to retrieve the lCustData member.
///
public IntPtr lCustData;
/// Instance that contains a dialog box template specified by the lpTemplateName member.
public HINSTANCE hInstance;
///
/// Pointer to a null-terminated string that specifies the name of the resource file for the dialog box template that is to be
/// substituted for the library's Insert Object dialog box template.
///
[MarshalAs(UnmanagedType.LPTStr)]
public string lpszTemplate;
/// Customized template handle.
public HRSRC hResource;
/// CLSID for class of the object to be inserted. Filled on output.
public Guid clsid;
/// Pointer to the name of the file to be linked or embedded. Filled on output.
[MarshalAs(UnmanagedType.LPTStr)]
public string lpszFile;
/// Size of lpszFile buffer; will not exceed MAX_PATH.
public uint cchFile;
/// Number of CLSIDs included in the lpClsidExclude list. Filled on input.
public uint cClsidExclude;
/// Pointer to a list of CLSIDs to exclude from listing.
public IntPtr lpClsidExclude;
///
/// Identifier of the requested interface. If OleUIInsertObject creates the object, then it will return a pointer to this
/// interface. This parameter is ignored if OleUIInsertObject does not create the object.
///
public Guid iid;
///
/// Rendering option. If OleUIInsertObject creates the object, then it selects the rendering option when it creates the object.
/// This parameter is ignored if OleUIInsertObject does not create the object.
///
public uint oleRender;
///
/// Desired format. If OleUIInsertObject creates the object, then it selects the format when it creates the object. This
/// parameter is ignored if OleUIInsertObject does not create the object.
///
public IntPtr lpFormatEtc;
///
/// Pointer to the client site to be used for the object. This parameter is ignored if OleUIInsertObject does not create the object.
///
public IOleClientSite lpIOleClientSite;
///
/// Pointer to the storage to be used for the object. This parameter is ignored if OleUIInsertObject does not create the object.
///
public IStorage lpIStorage;
///
/// Address of output pointer variable that contains the interface pointer for the object being inserted. This parameter is
/// ignored if OleUIInsertObject does not create the object.
///
public IntPtr ppvObj;
/// Result of creation calls. This parameter is ignored if OleUIInsertObject does not create the object.
public int sc;
/// MetafilePict structure containing the iconic aspect, if it wasn't placed in the object's cache.
public HGLOBAL hMetaPict;
}
///
/// Contains information that is used to initialize the Link tab of the Object Properties dialog box. A reference to
/// it is passed in as part of the OLEUIOBJECTPROPS structure to the OleUIObjectProperties function. This tab shows the location,
/// update status, and update time for a link. It allows the user to change the source of the link, toggle its update status between
/// automatic and manual update, open the source, force an update of the link, or break the link (convert it to a static picture).
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/ns-oledlg-oleuilinkpropsa typedef struct tagOLEUILINKPROPSA { DWORD
// cbStruct; DWORD dwFlags; DWORD dwReserved1[2]; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; DWORD dwReserved2[3]; struct
// tagOLEUIOBJECTPROPSA *lpOP; } OLEUILINKPROPSA, *POLEUILINKPROPSA, *LPOLEUILINKPROPSA;
[PInvokeData("oledlg.h", MSDNShortId = "NS:oledlg.tagOLEUILINKPROPSA")]
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct OLEUILINKPROPS
{
/// The size of the structure, in bytes.
public uint cbStruct;
/// Contains in/out flags specific to the Links page.
public uint dwFlags;
/// This member is reserved.
public ulong dwReserved1;
/// Pointer to the hook callback (not used in this dialog box).
public LPFNOLEUIHOOK lpfnHook;
/// Custom data to pass to hook (not used in this dialog box).
public IntPtr lCustData;
/// This member is reserved.
public uint dwReserved2_1;
/// This member is reserved.
public uint dwReserved2_2;
/// This member is reserved.
public uint dwReserved2_3;
/// Used internally.
public IntPtr lpOP;
}
///
/// Contains information that is used to initialize the standard Object Properties dialog box. It contains references to
/// interfaces used to gather information about the embedding or link, references to three structures that are used to initialize
/// the default tabs - General (OLEUIGNRLPROPS), View (OLEUIVIEWPROPS), and Link (OLEUILINKPROPS), if
/// appropriate - and a standard property-sheet extensibility interface that allows the caller to add additional custom property
/// sheets to the dialog box.
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/ns-oledlg-oleuiobjectpropsa typedef struct tagOLEUIOBJECTPROPSA { DWORD
// cbStruct; DWORD dwFlags; LPPROPSHEETHEADERA lpPS; DWORD dwObject; LPOLEUIOBJINFOA lpObjInfo; DWORD dwLink; LPOLEUILINKINFOA
// lpLinkInfo; LPOLEUIGNRLPROPSA lpGP; LPOLEUIVIEWPROPSA lpVP; LPOLEUILINKPROPSA lpLP; } OLEUIOBJECTPROPSA, *POLEUIOBJECTPROPSA, *LPOLEUIOBJECTPROPSA;
[PInvokeData("oledlg.h", MSDNShortId = "NS:oledlg.tagOLEUIOBJECTPROPSA")]
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct OLEUIOBJECTPROPS
{
/// The size of the structure, in bytes.
public uint cbStruct;
///
/// Contains in/out global flags for the property sheet.
///
///
/// Value
/// Meaning
///
/// -
/// OPF_OBJECTISLINK
/// Object is a link object and therefore has a link property page.
///
/// -
/// OPF_NOFILLDEFAULT
/// Do not fill in default values for the object.
///
/// -
/// OPF_SHOWHELP
/// The dialog box will display a Help button.
///
/// -
/// OPF_DISABLECONVERT
/// The Convert button will be disabled on the general property page.
///
///
///
public OPF dwFlags;
/// Pointer to the standard property sheet header (PROPSHEETHEADER in ComCtl32), used for extensibility.
public IntPtr lpPS;
/// Identifier for the object.
public uint dwObject;
/// Pointer to the interface to manipulate object.
public IOleUIObjInfo lpObjInfo;
///
/// Container-defined unique identifier for a single link. Containers can use the pointer to the link's container site for this value.
///
public uint dwLink;
/// Pointer to the interface to manipulate link.
public IOleUILinkInfo lpLinkInfo;
/// Pointer to the general page data in .
public IntPtr lpGP;
/// Pointer to the view page data in .
public IntPtr lpVP;
/// Pointer to the link page data in .
public IntPtr lpLP;
}
///
/// An array of entries to be specified in the OLEUIPASTESPECIAL structure for the Paste Special dialog box. Each entry
/// includes a FORMATETC structure which specifies the formats that are acceptable, a string that is to represent the format in the
/// dialog box's listbox, a string to customize the result text of the dialog box, and a set of flags from the OLEUIPASTEFLAG
/// enumeration. The flags indicate if the entry is valid for pasting only, linking only or both pasting and linking. If the entry
/// is valid for linking, the flags indicate which link types are acceptable by OR'ing together the appropriate OLEUIPASTE_LINKTYPEn values.
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/ns-oledlg-oleuipasteentrya typedef struct tagOLEUIPASTEENTRYA {
// FORMATETC fmtetc; LPCSTR lpstrFormatName; LPCSTR lpstrResultText; DWORD dwFlags; DWORD dwScratchSpace; } OLEUIPASTEENTRYA,
// *POLEUIPASTEENTRYA, *LPOLEUIPASTEENTRYA;
[PInvokeData("oledlg.h", MSDNShortId = "NS:oledlg.tagOLEUIPASTEENTRYA")]
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct OLEUIPASTEENTRY
{
///
/// Format that is acceptable. The Paste Special dialog box checks if this format is offered by the object on the
/// clipboard and if so, offers it for selection to the user.
///
public FORMATETC fmtetc;
///
/// Pointer to the string that represents the format to the user. Any %s in this string is replaced by the FullUserTypeName of
/// the object on the clipboard and the resulting string is placed in the list box of the dialog box. Only one %s is allowed.
/// The presence or absence of %s specifies whether the result-text is to indicate that data is being pasted or that an object
/// that can be activated by an application is being pasted. If %s is present, the resulting text says that an object is being
/// pasted. Otherwise, it says that data is being pasted.
///
[MarshalAs(UnmanagedType.LPTStr)]
public string lpstrFormatName;
///
/// Pointer to the string used to customize the resulting text of the dialog box when the user selects the format corresponding
/// to this entry. Any %s in this string is replaced by the application name or FullUserTypeName of the object on the clipboard.
/// Only one %s is allowed.
///
[MarshalAs(UnmanagedType.LPTStr)]
public string lpstrResultText;
/// Values from OLEUIPASTEFLAG enumeration.
public OLEUIPASTEFLAG dwFlags;
///
/// Scratch space available to routines that loop through an IEnumFORMATETC to mark if the PasteEntry format is available. This
/// field can be left uninitialized.
///
public uint dwScratchSpace;
}
///
/// Contains information that the OLE User Interface Library uses to initialize the Paste Special dialog box, as well as
/// space for the library to return information when the dialog box is dismissed.
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/ns-oledlg-oleuipastespeciala typedef struct tagOLEUIPASTESPECIALA {
// DWORD cbStruct; DWORD dwFlags; HWND hWndOwner; LPCSTR lpszCaption; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; HINSTANCE hInstance;
// LPCSTR lpszTemplate; HRSRC hResource; LPDATAOBJECT lpSrcDataObj; LPOLEUIPASTEENTRYA arrPasteEntries; int cPasteEntries; UINT
// *arrLinkTypes; int cLinkTypes; UINT cClsidExclude; LPCLSID lpClsidExclude; int nSelectedIndex; BOOL fLink; HGLOBAL hMetaPict;
// SIZEL sizel; } OLEUIPASTESPECIALA, *POLEUIPASTESPECIALA, *LPOLEUIPASTESPECIALA;
[PInvokeData("oledlg.h", MSDNShortId = "NS:oledlg.tagOLEUIPASTESPECIALA")]
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct OLEUIPASTESPECIAL
{
/// The size of the structure, in bytes. This member must be filled on input.
public uint cbStruct;
///
///
/// On input, dwFlags specifies the initialization and creation flags. On exit, it specifies the user's choices. It may
/// be a combination of the following flags.
///
///
///
/// Value
/// Meaning
///
/// -
/// PSF_SHOWHELP
/// Dialog box will display a Help button.
///
/// -
/// PSF_SELECTPASTE
///
/// The Paste radio button will be selected at dialog box startup. This is the default, if PSF_SELECTPASTE or
/// PSF_SELECTPASTELINK are not specified. Also, it specifies the state of the button on dialog termination. IN/OUT flag.
///
///
/// -
/// PSF_SELECTPASTELINK
///
/// The PasteLink radio button will be selected at dialog box startup. Also, specifies the state of the button on dialog
/// termination. IN/OUT flag.
///
///
/// -
/// PSF_CHECKDISPLAYASICON
/// Whether the Display As Icon radio button was checked on dialog box termination. OUT flag.
///
/// -
/// PSF_DISABLEDISPLAYASICON
/// The Display As Icon check box will be disabled on initialization.
///
/// -
/// HIDECHANGEICON
///
/// Used to disable the change-icon button in the dialog box, which is available to users when they're pasting an OLE object by
/// default. See STAYONCLIPBOARDCHANGE otherwise.
///
///
/// -
/// STAYONCLIPBOARDCHANGE
///
/// Used to tell the dialog box to stay up if the clipboard changes while the dialog box is up. If the user switches to another
/// application and copies or cuts something, the dialog box will, by default, perform a cancel operation, which will remove the
/// dialog box since the options it's in the middle of presenting to the user are no longer up-to-date with respect to what's
/// really on the clipboard.
///
///
/// -
/// NOREFRESHDATAOBJECT
///
/// Used in conjunction with STAYONCLIPBOARDCHANGE (it doesn't do anything otherwise). If the clipboard changes while the dialog
/// box is up and STAYONCLIPBOARDCHANGE is specified, then NOREFRESHDATAOBJECT indicates that the dialog box should NOT refresh
/// the contents of the dialog box to reflect the new contents of the clipboard. This is useful if the application is using the
/// paste-special dialog box on an IDataObject besides the one on the clipboard, for example, as part of a right-click
/// drag-and-drop operation.
///
///
///
///
public PSF dwFlags;
/// The window that owns the dialog box. This member should not be NULL.
public HWND hWndOwner;
///
/// Pointer to a string to be used as the title of the dialog box. If NULL, then the library uses Paste Special.
///
[MarshalAs(UnmanagedType.LPTStr)]
public string lpszCaption;
///
/// Pointer to a hook function that processes messages intended for the dialog box. The hook function must return zero to pass a
/// message that it didn't process back to the dialog box procedure in the library. The hook function must return a nonzero
/// value to prevent the library's dialog box procedure from processing a message it has already processed.
///
public LPFNOLEUIHOOK lpfnHook;
///
/// Application-defined data that the library passes to the hook function pointed to by the lpfnHook member. The library
/// passes a pointer to the OLEUIPASTESPECIAL structure in the lParam parameter of the WM_INITDIALOG message; this
/// pointer can be used to retrieve the lCustData member.
///
public IntPtr lCustData;
/// Instance that contains a dialog box template specified by the lpTemplateName member.
public HINSTANCE hInstance;
///
/// Pointer to a null-terminated string that specifies the name of the resource file for the dialog box template that is to be
/// substituted for the library's Paste Special dialog box template.
///
[MarshalAs(UnmanagedType.LPTStr)]
public string lpszTemplate;
/// Customized template handle.
public HRSRC hResource;
///
/// Pointer to the IDataObject interface of the data object to be pasted (from the clipboard). This member is filled on input.
/// If lpSrcDataObj is NULL when OleUIPasteSpecial is called, then OleUIPasteSpecial will attempt to
/// retrieve a pointer to an IDataObject from the clipboard. If OleUIPasteSpecial succeeds, it is the caller's
/// responsibility to free the IDataObject returned in lpSrcDataObj.
///
public IDataObject lpSrcDataObj;
/// The array which specifies acceptable formats. This member is filled on input.
public IntPtr arrPasteEntries;
/// Number of OLEUIPASTEENTRY array entries. This member is filled on input.
public int cPasteEntries;
///
/// List of link types that are acceptable. Link types are referred to using OLEUIPASTEFLAG in arrPasteEntries. This
/// member is filled on input.
///
public IntPtr arrLinkTypes;
/// Number of link types. This member is filled on input.
public int cLinkTypes;
/// Number of CLSIDs in lpClsidExclude. This member is filled on input.
public uint cClsidExclude;
///
/// Pointer to an array of CLSIDs to exclude from the list of available server objects for a Paste operation. Note that this
/// does not affect Paste Link. An application can prevent embedding into itself by listing its own CLSID in this list.
/// This field is filled on input.
///
public IntPtr lpClsidExclude;
/// Index of arrPasteEntries that the user selected. This member is filled on output.
public int nSelectedIndex;
/// Whether Paste or Paste Link was selected by the user. This member is filled on output.
[MarshalAs(UnmanagedType.Bool)]
public bool fLink;
/// Handle to the Metafile containing the icon and icon title selected by the user. This member is filled on output.
public HGLOBAL hMetaPict;
///
/// The size of object as displayed in its source, if the display aspect chosen by the user matches the aspect displayed in the
/// source. If the user chooses a different aspect, then sizel.cx and sizel.cy are both set to zero. The size of
/// the object as it is displayed in the source is retrieved from the ObjectDescriptor if fLink is FALSE and from
/// the LinkSrcDescriptor if fLink is TRUE. This member is filled on output.
///
public SIZE sizel;
}
///
/// Contains information that is used to initialize the View tab of the Object properties dialog box. A reference to
/// it is passed in as part of the OLEUIOBJECTPROPS structure to the OleUIObjectProperties function. This tab allows the user to
/// toggle between "content" and "iconic" views of the object, and change its scaling within the container. It also allows the user
/// to tunnel to the change icon dialog box when the object is being displayed iconically.
///
// https://docs.microsoft.com/en-us/windows/win32/api/oledlg/ns-oledlg-oleuiviewpropsa typedef struct tagOLEUIVIEWPROPSA { DWORD
// cbStruct; DWORD dwFlags; DWORD dwReserved1[2]; LPFNOLEUIHOOK lpfnHook; LPARAM lCustData; DWORD dwReserved2[3]; struct
// tagOLEUIOBJECTPROPSA *lpOP; int nScaleMin; int nScaleMax; } OLEUIVIEWPROPSA, *POLEUIVIEWPROPSA, *LPOLEUIVIEWPROPSA;
[PInvokeData("oledlg.h", MSDNShortId = "NS:oledlg.tagOLEUIVIEWPROPSA")]
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct OLEUIVIEWPROPS
{
/// The size of the structure, in bytes.
public uint cbStruct;
///
/// Flags specific to view page.
///
///
/// Value
/// Meaning
///
/// -
/// VPF_SELECTRELATIVE
/// Relative to origin.
///
/// -
/// VPF_DISABLERELATIVE
/// Disable relative to origin.
///
/// -
/// VPF_DISABLESCALE
/// Disable scale option.
///
///
///
public VPF dwFlags;
/// This member is reserved.
public ulong dwReserved1;
/// Pointer to a hook callback (not used in this dialog box).
public LPFNOLEUIHOOK lpfnHook;
/// Custom data to pass to the hook (not used in this dialog box).
public IntPtr lCustData;
/// This member is reserved.
public uint dwReserved2_1;
/// This member is reserved.
public uint dwReserved2_2;
/// This member is reserved.
public uint dwReserved2_3;
/// Used internally.
public IntPtr lpOP;
/// Minimum value for the scale range.
public int nScaleMin;
/// Maximum value for the scale range.
public int nScaleMax;
}
}
}