using System; using System.Runtime.InteropServices; using System.Text; using static Vanara.PInvoke.Gdi32; namespace Vanara.PInvoke { public static partial class User32 { #pragma warning disable CS1591 // Missing XML comment for publicly visible type or member public const int OBM_CLOSE = 32754; public const int OBM_UPARROW = 32753; public const int OBM_DNARROW = 32752; public const int OBM_RGARROW = 32751; public const int OBM_LFARROW = 32750; public const int OBM_REDUCE = 32749; public const int OBM_ZOOM = 32748; public const int OBM_RESTORE = 32747; public const int OBM_REDUCED = 32746; public const int OBM_ZOOMD = 32745; public const int OBM_RESTORED = 32744; public const int OBM_UPARROWD = 32743; public const int OBM_DNARROWD = 32742; public const int OBM_RGARROWD = 32741; public const int OBM_LFARROWD = 32740; public const int OBM_MNARROW = 32739; public const int OBM_COMBO = 32738; public const int OBM_UPARROWI = 32737; public const int OBM_DNARROWI = 32736; public const int OBM_RGARROWI = 32735; public const int OBM_LFARROWI = 32734; public const int OBM_OLD_CLOSE = 32767; public const int OBM_SIZE = 32766; public const int OBM_OLD_UPARROW = 32765; public const int OBM_OLD_DNARROW = 32764; public const int OBM_OLD_RGARROW = 32763; public const int OBM_OLD_LFARROW = 32762; public const int OBM_BTSIZE = 32761; public const int OBM_CHECK = 32760; public const int OBM_CHECKBOXES = 32759; public const int OBM_BTNCORNERS = 32758; public const int OBM_OLD_REDUCE = 32757; public const int OBM_OLD_ZOOM = 32756; public const int OBM_OLD_RESTORE = 32755; #pragma warning restore CS1591 // Missing XML comment for publicly visible type or member /// Specifies the load options for . [Flags] public enum LoadImageOptions : uint { /// The default flag; it does nothing. All it means is "not LR_MONOCHROME". LR_DEFAULTCOLOR = 0x00000000, /// Loads the image in black and white. LR_MONOCHROME = 0x00000001, /// Undocumented LR_COLOR = 0x00000002, /// Loads the stand-alone image from the file specified by lpszName (icon, cursor, or bitmap file). LR_LOADFROMFILE = 0x00000010, /// /// Retrieves the color value of the first pixel in the image and replaces the corresponding entry in the color table with the /// default window color (COLOR_WINDOW). All pixels in the image that use that entry become the default window color. This value /// applies only to images that have corresponding color tables. /// Do not use this option if you are loading a bitmap with a color depth greater than 8bpp. /// /// If fuLoad includes both the LR_LOADTRANSPARENT and LR_LOADMAP3DCOLORS values, LR_LOADTRANSPARENT takes precedence. However, /// the color table entry is replaced with COLOR_3DFACE rather than COLOR_WINDOW. /// /// LR_LOADTRANSPARENT = 0x00000020, /// /// Uses the width or height specified by the system metric values for cursors or icons, if the cxDesired or cyDesired values are /// set to zero. If this flag is not specified and cxDesired and cyDesired are set to zero, the function uses the actual resource /// size. If the resource contains multiple images, the function uses the size of the first image. /// LR_DEFAULTSIZE = 0x00000040, /// Uses true VGA colors. LR_VGACOLOR = 0x00000080, /// /// Searches the color table for the image and replaces the following shades of gray with the corresponding 3-D color. /// /// /// Dk Gray, RGB(128,128,128) with COLOR_3DSHADOW /// /// /// Gray, RGB(192,192,192) with COLOR_3DFACE /// /// /// Lt Gray, RGB(223,223,223) with COLOR_3DLIGHT /// /// /// Do not use this option if you are loading a bitmap with a color depth greater than 8bpp. /// LR_LOADMAP3DCOLORS = 0x00001000, /// /// When the uType parameter specifies IMAGE_BITMAP, causes the function to return a DIB section bitmap rather than a compatible /// bitmap. This flag is useful for loading a bitmap without mapping it to the colors of the display device. /// LR_CREATEDIBSECTION = 0x00002000, /// /// Shares the image handle if the image is loaded multiple times. If LR_SHARED is not set, a second call to LoadImage for the /// same resource will load the image again and return a different handle. /// When you use this flag, the system will destroy the resource when it is no longer needed. /// /// Do not use LR_SHARED for images that have non-standard sizes, that may change after loading, or that are loaded from a file. /// /// When loading a system icon or cursor, you must use LR_SHARED or the function will fail to load the resource. /// This function finds the first image in the cache with the requested resource name, regardless of the size requested. /// LR_SHARED = 0x00008000 } /// Specifies the type of image to be loaded by . public enum LoadImageType : uint { /// Loads a bitmap. IMAGE_BITMAP = 0, /// Loads an icon. IMAGE_ICON = 1, /// Loads a cursor. IMAGE_CURSOR = 2, /// Loads an enhanced metafile. IMAGE_ENHMETAFILE = 3 } /// Loads an icon, cursor, animated cursor, or bitmap. /// /// A handle to the module of either a DLL or executable (.exe) that contains the image to be loaded. For more information, see /// GetModuleHandle. Note that as of 32-bit Windows, an instance handle (HINSTANCE), such as the application instance handle exposed /// by system function call of WinMain, and a module handle (HMODULE) are the same thing. /// To load an OEM image, set this parameter to NULL. /// To load a stand-alone resource (icon, cursor, or bitmap file)—for example, c:\myimage.bmp—set this parameter to NULL. /// /// /// The image to be loaded. If the hinst parameter is non-NULL and the fuLoad parameter omits LR_LOADFROMFILE, lpszName specifies the /// image resource in the hinst module. If the image resource is to be loaded by name from the module, the lpszName parameter is a /// pointer to a null-terminated string that contains the name of the image resource. If the image resource is to be loaded by /// ordinal from the module, use the MAKEINTRESOURCE macro to convert the image ordinal into a form that can be passed to the /// LoadImage function. For more information, see the Remarks section below. /// /// If the hinst parameter is NULL and the fuLoad parameter omits the LR_LOADFROMFILE value, the lpszName specifies the OEM image to load. /// /// /// To pass these constants to the LoadImage function, use the MAKEINTRESOURCE macro. For example, to load the OCR_NORMAL cursor, /// pass MAKEINTRESOURCE(OCR_NORMAL) as the lpszName parameter, NULL as the hinst parameter, and LR_SHARED as one of the flags to the /// fuLoad parameter. /// /// /// If the fuLoad parameter includes the LR_LOADFROMFILE value, lpszName is the name of the file that contains the stand-alone /// resource (icon, cursor, or bitmap file). Therefore, set hinst to NULL. /// /// /// The type of image to be loaded. This parameter can be one of the following values. /// /// The width, in pixels, of the icon or cursor. If this parameter is zero and the fuLoad parameter is LR_DEFAULTSIZE, the function /// uses the SM_CXICON or SM_CXCURSOR system metric value to set the width. If this parameter is zero and LR_DEFAULTSIZE is not used, /// the function uses the actual resource width. /// /// /// The height, in pixels, of the icon or cursor. If this parameter is zero and the fuLoad parameter is LR_DEFAULTSIZE, the function /// uses the SM_CYICON or SM_CYCURSOR system metric value to set the height. If this parameter is zero and LR_DEFAULTSIZE is not /// used, the function uses the actual resource height. /// /// Loading options. /// /// If the function succeeds, the return value is the handle of the newly loaded image. If the function fails, the return value is /// NULL.To get extended error information, call GetLastError. /// [PInvokeData("WinUser.h", MSDNShortId = "ms648045")] [DllImport(Lib.User32, SetLastError = true, CharSet = CharSet.Auto)] [System.Security.SecurityCritical] public static extern IntPtr LoadImage(HINSTANCE hinst, SafeResourceId lpszName, LoadImageType uType, int cxDesired, int cyDesired, LoadImageOptions fuLoad); /// Loads a bitmap. /// /// A handle to the module of either a DLL or executable (.exe) that contains the image to be loaded. For more information, see /// GetModuleHandle. Note that as of 32-bit Windows, an instance handle (HINSTANCE), such as the application instance handle exposed /// by system function call of WinMain, and a module handle (HMODULE) are the same thing. /// To load an OEM image, set this parameter to NULL. /// To load a stand-alone resource (icon, cursor, or bitmap file)—for example, c:\myimage.bmp—set this parameter to NULL. /// /// /// The image to be loaded. If the hinst parameter is non-NULL and the fuLoad parameter omits LR_LOADFROMFILE, lpszName specifies the /// image resource in the hinst module. If the image resource is to be loaded by name from the module, the lpszName parameter is a /// pointer to a null-terminated string that contains the name of the image resource. If the image resource is to be loaded by /// ordinal from the module, use the MAKEINTRESOURCE macro to convert the image ordinal into a form that can be passed to the /// LoadImage function. For more information, see the Remarks section below. /// /// If the hinst parameter is NULL and the fuLoad parameter omits the LR_LOADFROMFILE value, the lpszName specifies the OEM image to load. /// /// /// To pass these constants to the LoadImage function, use the MAKEINTRESOURCE macro. For example, to load the OCR_NORMAL cursor, /// pass MAKEINTRESOURCE(OCR_NORMAL) as the lpszName parameter, NULL as the hinst parameter, and LR_SHARED as one of the flags to the /// fuLoad parameter. /// /// /// If the fuLoad parameter includes the LR_LOADFROMFILE value, lpszName is the name of the file that contains the stand-alone /// resource (icon, cursor, or bitmap file). Therefore, set hinst to NULL. /// /// /// /// The width, in pixels, of the icon or cursor. If this parameter is zero and the fuLoad parameter is LR_DEFAULTSIZE, the function /// uses the SM_CXICON or SM_CXCURSOR system metric value to set the width. If this parameter is zero and LR_DEFAULTSIZE is not used, /// the function uses the actual resource width. /// /// /// The height, in pixels, of the icon or cursor. If this parameter is zero and the fuLoad parameter is LR_DEFAULTSIZE, the function /// uses the SM_CYICON or SM_CYCURSOR system metric value to set the height. If this parameter is zero and LR_DEFAULTSIZE is not /// used, the function uses the actual resource height. /// /// Loading options. /// /// If the function succeeds, the return value is the handle of the newly loaded image. If the function fails, the return value is /// NULL.To get extended error information, call GetLastError. /// public static SafeHBITMAP LoadImage_Bitmap(HINSTANCE hinst, SafeResourceId lpszName, int cxDesired, int cyDesired, LoadImageOptions fuLoad) => new SafeHBITMAP(LoadImage(hinst, lpszName, LoadImageType.IMAGE_BITMAP, cxDesired, cyDesired, fuLoad), true); /// Loads a cursor or animated cursor. /// /// A handle to the module of either a DLL or executable (.exe) that contains the image to be loaded. For more information, see /// GetModuleHandle. Note that as of 32-bit Windows, an instance handle (HINSTANCE), such as the application instance handle exposed /// by system function call of WinMain, and a module handle (HMODULE) are the same thing. /// To load an OEM image, set this parameter to NULL. /// To load a stand-alone resource (icon, cursor, or bitmap file)—for example, c:\myimage.bmp—set this parameter to NULL. /// /// /// The image to be loaded. If the hinst parameter is non-NULL and the fuLoad parameter omits LR_LOADFROMFILE, lpszName specifies the /// image resource in the hinst module. If the image resource is to be loaded by name from the module, the lpszName parameter is a /// pointer to a null-terminated string that contains the name of the image resource. If the image resource is to be loaded by /// ordinal from the module, use the MAKEINTRESOURCE macro to convert the image ordinal into a form that can be passed to the /// LoadImage function. For more information, see the Remarks section below. /// /// If the hinst parameter is NULL and the fuLoad parameter omits the LR_LOADFROMFILE value, the lpszName specifies the OEM image to load. /// /// /// To pass these constants to the LoadImage function, use the MAKEINTRESOURCE macro. For example, to load the OCR_NORMAL cursor, /// pass MAKEINTRESOURCE(OCR_NORMAL) as the lpszName parameter, NULL as the hinst parameter, and LR_SHARED as one of the flags to the /// fuLoad parameter. /// /// /// If the fuLoad parameter includes the LR_LOADFROMFILE value, lpszName is the name of the file that contains the stand-alone /// resource (icon, cursor, or bitmap file). Therefore, set hinst to NULL. /// /// /// /// The width, in pixels, of the icon or cursor. If this parameter is zero and the fuLoad parameter is LR_DEFAULTSIZE, the function /// uses the SM_CXICON or SM_CXCURSOR system metric value to set the width. If this parameter is zero and LR_DEFAULTSIZE is not used, /// the function uses the actual resource width. /// /// /// The height, in pixels, of the icon or cursor. If this parameter is zero and the fuLoad parameter is LR_DEFAULTSIZE, the function /// uses the SM_CYICON or SM_CYCURSOR system metric value to set the height. If this parameter is zero and LR_DEFAULTSIZE is not /// used, the function uses the actual resource height. /// /// Loading options. /// /// If the function succeeds, the return value is the handle of the newly loaded image. If the function fails, the return value is /// NULL.To get extended error information, call GetLastError. /// public static SafeHCURSOR LoadImage_Cursor(HINSTANCE hinst, SafeResourceId lpszName, int cxDesired, int cyDesired, LoadImageOptions fuLoad) => new SafeHCURSOR(LoadImage(hinst, lpszName, LoadImageType.IMAGE_CURSOR, cxDesired, cyDesired, fuLoad), true); /// Loads an enhanced metafile. /// /// A handle to the module of either a DLL or executable (.exe) that contains the image to be loaded. For more information, see /// GetModuleHandle. Note that as of 32-bit Windows, an instance handle (HINSTANCE), such as the application instance handle exposed /// by system function call of WinMain, and a module handle (HMODULE) are the same thing. /// To load an OEM image, set this parameter to NULL. /// To load a stand-alone resource (icon, cursor, or bitmap file)—for example, c:\myimage.bmp—set this parameter to NULL. /// /// /// The image to be loaded. If the hinst parameter is non-NULL and the fuLoad parameter omits LR_LOADFROMFILE, lpszName specifies the /// image resource in the hinst module. If the image resource is to be loaded by name from the module, the lpszName parameter is a /// pointer to a null-terminated string that contains the name of the image resource. If the image resource is to be loaded by /// ordinal from the module, use the MAKEINTRESOURCE macro to convert the image ordinal into a form that can be passed to the /// LoadImage function. For more information, see the Remarks section below. /// /// If the hinst parameter is NULL and the fuLoad parameter omits the LR_LOADFROMFILE value, the lpszName specifies the OEM image to load. /// /// /// To pass these constants to the LoadImage function, use the MAKEINTRESOURCE macro. For example, to load the OCR_NORMAL cursor, /// pass MAKEINTRESOURCE(OCR_NORMAL) as the lpszName parameter, NULL as the hinst parameter, and LR_SHARED as one of the flags to the /// fuLoad parameter. /// /// /// If the fuLoad parameter includes the LR_LOADFROMFILE value, lpszName is the name of the file that contains the stand-alone /// resource (icon, cursor, or bitmap file). Therefore, set hinst to NULL. /// /// /// /// The width, in pixels, of the icon or cursor. If this parameter is zero and the fuLoad parameter is LR_DEFAULTSIZE, the function /// uses the SM_CXICON or SM_CXCURSOR system metric value to set the width. If this parameter is zero and LR_DEFAULTSIZE is not used, /// the function uses the actual resource width. /// /// /// The height, in pixels, of the icon or cursor. If this parameter is zero and the fuLoad parameter is LR_DEFAULTSIZE, the function /// uses the SM_CYICON or SM_CYCURSOR system metric value to set the height. If this parameter is zero and LR_DEFAULTSIZE is not /// used, the function uses the actual resource height. /// /// Loading options. /// /// If the function succeeds, the return value is the handle of the newly loaded image. If the function fails, the return value is /// NULL.To get extended error information, call GetLastError. /// public static SafeHENHMETAFILE LoadImage_EnhMetaFile(HINSTANCE hinst, SafeResourceId lpszName, int cxDesired, int cyDesired, LoadImageOptions fuLoad) => new SafeHENHMETAFILE(LoadImage(hinst, lpszName, LoadImageType.IMAGE_ENHMETAFILE, cxDesired, cyDesired, fuLoad), true); /// Loads an icon. /// /// A handle to the module of either a DLL or executable (.exe) that contains the image to be loaded. For more information, see /// GetModuleHandle. Note that as of 32-bit Windows, an instance handle (HINSTANCE), such as the application instance handle exposed /// by system function call of WinMain, and a module handle (HMODULE) are the same thing. /// To load an OEM image, set this parameter to NULL. /// To load a stand-alone resource (icon, cursor, or bitmap file)—for example, c:\myimage.bmp—set this parameter to NULL. /// /// /// The image to be loaded. If the hinst parameter is non-NULL and the fuLoad parameter omits LR_LOADFROMFILE, lpszName specifies the /// image resource in the hinst module. If the image resource is to be loaded by name from the module, the lpszName parameter is a /// pointer to a null-terminated string that contains the name of the image resource. If the image resource is to be loaded by /// ordinal from the module, use the MAKEINTRESOURCE macro to convert the image ordinal into a form that can be passed to the /// LoadImage function. For more information, see the Remarks section below. /// /// If the hinst parameter is NULL and the fuLoad parameter omits the LR_LOADFROMFILE value, the lpszName specifies the OEM image to load. /// /// /// To pass these constants to the LoadImage function, use the MAKEINTRESOURCE macro. For example, to load the OCR_NORMAL cursor, /// pass MAKEINTRESOURCE(OCR_NORMAL) as the lpszName parameter, NULL as the hinst parameter, and LR_SHARED as one of the flags to the /// fuLoad parameter. /// /// /// If the fuLoad parameter includes the LR_LOADFROMFILE value, lpszName is the name of the file that contains the stand-alone /// resource (icon, cursor, or bitmap file). Therefore, set hinst to NULL. /// /// /// /// The width, in pixels, of the icon or cursor. If this parameter is zero and the fuLoad parameter is LR_DEFAULTSIZE, the function /// uses the SM_CXICON or SM_CXCURSOR system metric value to set the width. If this parameter is zero and LR_DEFAULTSIZE is not used, /// the function uses the actual resource width. /// /// /// The height, in pixels, of the icon or cursor. If this parameter is zero and the fuLoad parameter is LR_DEFAULTSIZE, the function /// uses the SM_CYICON or SM_CYCURSOR system metric value to set the height. If this parameter is zero and LR_DEFAULTSIZE is not /// used, the function uses the actual resource height. /// /// Loading options. /// /// If the function succeeds, the return value is the handle of the newly loaded image. If the function fails, the return value is /// NULL.To get extended error information, call GetLastError. /// public static SafeHICON LoadImage_Icon(HINSTANCE hinst, SafeResourceId lpszName, int cxDesired, int cyDesired, LoadImageOptions fuLoad) => new SafeHICON(LoadImage(hinst, lpszName, LoadImageType.IMAGE_ICON, cxDesired, cyDesired, fuLoad), true); /// /// Loads a string resource from the executable file associated with a specified module, copies the string into a buffer, and appends /// a terminating null character. /// /// /// A handle to an instance of the module whose executable file contains the string resource. To get the handle to the application /// itself, call the GetModuleHandle function with NULL. /// /// The identifier of the string to be loaded. /// The buffer is to receive the string. Must be of sufficient length to hold a pointer (8 bytes). /// /// The size of the buffer, in characters. The string is truncated and null-terminated if it is longer than the number of characters /// specified. If this parameter is 0, then lpBuffer receives a read-only pointer to the resource itself. /// /// /// If the function succeeds, the return value is the number of characters copied into the buffer, not including the terminating null /// character, or zero if the string resource does not exist. To get extended error information, call GetLastError. /// [PInvokeData("WinUser.h", MSDNShortId = "ms647486")] [DllImport(Lib.User32, CharSet = CharSet.Auto, SetLastError = true)] [System.Security.SecurityCritical] public static extern int LoadString(HINSTANCE hInstance, int uID, StringBuilder lpBuffer, int nBufferMax); /// /// Loads a string resource from the executable file associated with a specified module, copies the string into a buffer, and appends /// a terminating null character. /// /// /// A handle to an instance of the module whose executable file contains the string resource. To get the handle to the application /// itself, call the GetModuleHandle function with NULL. /// /// The identifier of the string to be loaded. /// The buffer is to receive the string. Must be of sufficient length to hold a pointer (8 bytes). /// /// The size of the buffer, in characters. The string is truncated and null-terminated if it is longer than the number of characters /// specified. If this parameter is 0, then lpBuffer receives a read-only pointer to the resource itself. /// /// /// If the function succeeds, the return value is the number of characters copied into the buffer, not including the terminating null /// character, or zero if the string resource does not exist. To get extended error information, call GetLastError. /// [PInvokeData("WinUser.h", MSDNShortId = "ms647486")] [DllImport(Lib.User32, CharSet = CharSet.Auto, SetLastError = true)] [System.Security.SecurityCritical] public static extern int LoadString(HINSTANCE hInstance, int uID, out IntPtr lpBuffer, int nBufferMax); /// [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct GRPICONDIR { /// Reserved (must be 0) public ushort idReserved; /// Resource type public ResourceType idType; /// Icon count public ushort idCount; } /// Represents an icon as stored in a resource [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct GRPICONDIRENTRY { /// Width, in pixels, of the image public byte bWidth; /// Height, in pixels, of the image public byte bHeight; /// Number of colors in image (0 if >= 8bpp) public byte bColorCount; /// Reserved public byte bReserved; /// Color Planes public ushort wPlanes; /// Bits per pixel public ushort wBitCount; /// How many bytes in this resource? public uint dwBytesInRes; /// The ID public ushort nId; } } }