// ------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
// ------------------------------------------------------------------------------

#pragma warning disable CS1591,CS1573,CS0465,CS0649,CS8019,CS1570,CS1584,CS1658,CS0436
namespace Windows.Win32
{
    using global::System;
    using global::System.Diagnostics;
    using global::System.Runtime.CompilerServices;
    using global::System.Runtime.InteropServices;
    using winmdroot = global::Windows.Win32;

    namespace UI.Shell
    {
        /// <summary>Contains information that the system needs to display notifications in the notification area. Used by Shell_NotifyIcon.</summary>
        /// <remarks>
        /// <para>See <a href="https://msdn.microsoft.com/library/aa511497.aspx">Notifications</a> in the Windows User Experience Interaction Guidelines for more information on notification UI and content best practices. If you set the <b>NIF_INFO</b> flag in the <b>uFlags</b> member, the balloon-style notification is used. For more discussion of these notifications, see <a href="https://docs.microsoft.com/windows/desktop/Controls/using-tooltip-contro">Balloon tooltips</a>. No more than one balloon notification at a time can be displayed for the taskbar. If an application attempts to display a notification when one is already being displayed, the new notification is queued and displayed when the older notification goes away. In versions of Windows before Windows Vista, the new notification would not appear until the existing notification has been visible for at least the system minimum timeout length, regardless of the original notification's <b>uTimeout</b> value. If the user does not appear to be using the computer, the system does not count this time toward the timeout. Several members of this structure are only supported for Windows 2000 and later. To enable these members, include one of the following lines in your header:</para>
        /// <para></para>
        /// <para>This doc was truncated.</para>
        /// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#">Read more on docs.microsoft.com</see>.</para>
        /// </remarks>
        [StructLayout(LayoutKind.Sequential, Pack = 1)]
        internal partial struct NOTIFYICONDATAW32
        {
            /// <summary>
            /// <para>Type: <b>DWORD</b> The size of this structure, in bytes.</para>
            /// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
            /// </summary>
            internal uint cbSize;
            /// <summary>
            /// <para>Type: <b>HWND</b> A handle to the window that receives notifications associated with an icon in the notification area.</para>
            /// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
            /// </summary>
            internal winmdroot.Foundation.HWND hWnd;
            /// <summary>
            /// <para>Type: <b>UINT</b> The application-defined identifier of the taskbar icon. The Shell uses either (<b>hWnd</b> plus <b>uID</b>) or <b>guidItem</b> to identify which icon to operate on when <a href="https://docs.microsoft.com/windows/desktop/api/shellapi/nf-shellapi-shell_notifyicona">Shell_NotifyIcon</a> is invoked. You can have multiple icons associated with a single <b>hWnd</b> by assigning each a different <b>uID</b>. If <b>guidItem</b> is specified, <b>uID</b> is ignored.</para>
            /// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
            /// </summary>
            internal uint uID;
            /// <summary>Type: <b>UINT</b></summary>
            internal winmdroot.UI.Shell.NOTIFY_ICON_DATA_FLAGS uFlags;
            /// <summary>
            /// <para>Type: <b>UINT</b> An application-defined message identifier. The system uses this identifier to send notification messages to the window identified in <b>hWnd</b>. These notification messages are sent when a mouse event or hover occurs in the bounding rectangle of the icon, when the icon is selected or activated with the keyboard, or when those actions occur in the balloon notification.</para>
            /// <para>When the <b>uVersion</b> member is either 0 or NOTIFYICON_VERSION, the <i>wParam</i> parameter of the message contains the identifier of the taskbar icon in which the event occurred. This identifier can be 32 bits in length. The <i>lParam</i> parameter holds the mouse or keyboard message associated with the event. For example, when the pointer moves over a taskbar icon, <i>lParam</i> is set to <a href="https://docs.microsoft.com/windows/desktop/inputdev/wm-mousemove">WM_MOUSEMOVE</a>. When the <b>uVersion</b> member is NOTIFYICON_VERSION_4, applications continue to receive notification events in the form of application-defined messages through the <b>uCallbackMessage</b> member, but the interpretation of the <i>lParam</i> and <i>wParam</i> parameters of that message is changed as follows: </para>
            /// <para>This doc was truncated.</para>
            /// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
            /// </summary>
            internal uint uCallbackMessage;
            /// <summary>
            /// <para>Type: <b>HICON</b> A handle to the icon to be added, modified, or deleted. Windows XP and later support icons of up to 32 BPP. If only a 16x16 pixel icon is provided, it is scaled to a larger size in a system set to a high dpi value. This can lead to an unattractive result. It is recommended that you provide both a 16x16 pixel icon and a 32x32 icon in your resource file. Use <a href="https://docs.microsoft.com/windows/desktop/api/commctrl/nf-commctrl-loadiconmetric">LoadIconMetric</a> to ensure that the correct icon is loaded and scaled appropriately. See Remarks for a code example.</para>
            /// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
            /// </summary>
            internal winmdroot.UI.WindowsAndMessaging.HICON hIcon;
            /// <summary>
            /// <para>Type: <b>TCHAR[64]</b> A null-terminated string that specifies the text for a standard tooltip. It can have a maximum of 64 characters, including the terminating null character.</para>
            /// <para>For Windows 2000 and later, <b>szTip</b> can have a maximum of 128 characters, including the terminating null character.</para>
            /// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
            /// </summary>
            internal __char_128 szTip;
            /// <summary>Type: <b>DWORD</b></summary>
            internal uint dwState;
            /// <summary>
            /// <para>Type: <b>DWORD</b> <b>Windows 2000 and later</b>. A value that specifies which bits of the <b>dwState</b> member are retrieved or modified. The possible values are the same as those for <b>dwState</b>. For example, setting this member to <b>NIS_HIDDEN</b> causes only the item's hidden state to be modified while the icon sharing bit is ignored regardless of its value.</para>
            /// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
            /// </summary>
            internal uint dwStateMask;
            /// <summary>
            /// <para>Type: <b>TCHAR[256]</b> <b>Windows 2000 and later</b>. A null-terminated string that specifies the text to display in a balloon notification. It can have a maximum of 256 characters, including the terminating null character, but should be restricted to 200 characters in English to accommodate localization. To remove the balloon notification from the UI, either delete the icon (with <a href="https://docs.microsoft.com/windows/desktop/api/shellapi/nf-shellapi-shell_notifyicona">NIM_DELETE</a>) or set the <b>NIF_INFO</b> flag in <b>uFlags</b> and set <b>szInfo</b> to an empty string.</para>
            /// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
            /// </summary>
            internal __char_256 szInfo;
            internal winmdroot.UI.Shell.NOTIFYICONDATAW32._Anonymous_e__Union Anonymous;
            /// <summary>
            /// <para>Type: <b>TCHAR[64]</b> <b>Windows 2000 and later</b>. A null-terminated string that specifies a title for a balloon notification. This title appears in a larger font immediately above the text. It can have a maximum of 64 characters, including the terminating null character, but should be restricted to 48 characters in English to accommodate localization.</para>
            /// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
            /// </summary>
            internal __char_64 szInfoTitle;
            /// <summary>
            /// <para>Type: <b>DWORD</b> <b>Windows 2000 and later</b>. Flags that can be set to modify the behavior and appearance of a balloon notification. The icon is placed to the left of the title. If the <b>szInfoTitle</b> member is zero-length, the icon is not shown.</para>
            /// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
            /// </summary>
            internal uint dwInfoFlags;
            /// <summary>
            /// <para>Type: <b>GUID</b> <b>Windows XP and later</b>.</para>
            /// <para></para>
            /// <para>This doc was truncated.</para>
            /// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
            /// </summary>
            internal global::System.Guid guidItem;
            /// <summary>
            /// <para>Type: <b>HICON</b> <b>Windows Vista and later</b>. The handle of a customized notification icon provided by the application that should be used independently of the notification area icon. If this member is non-NULL and the NIIF_USER flag is set in the <b>dwInfoFlags</b> member, this icon is used as the notification icon. If this member is <b>NULL</b>, the legacy behavior is carried out.</para>
            /// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
            /// </summary>
            internal winmdroot.UI.WindowsAndMessaging.HICON hBalloonIcon;

            [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
            internal partial struct __char_128
            {
                internal char _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, _83, _84, _85, _86, _87, _88, _89, _90, _91, _92, _93, _94, _95, _96, _97, _98, _99, _100, _101, _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, _118, _119, _120, _121, _122, _123, _124, _125, _126, _127;

                /// <summary>Always <c>128</c>.</summary>
                internal readonly int Length => 128;

                /// <summary>
                /// Copies the fixed array to a new string up to the specified length regardless of whether there are null terminating characters.
                /// </summary>
                /// <exception cref="ArgumentOutOfRangeException">
                /// Thrown when <paramref name="length"/> is less than <c>0</c> or greater than <see cref="Length"/>.
                /// </exception>
                internal unsafe readonly string ToString(int length)
                {
                    if (length < 0 || length > Length) throw new ArgumentOutOfRangeException(nameof(length), length, "Length must be between 0 and the fixed array length.");
                    fixed (char* p0 = &_0)
                        return new string(p0, 0, length);
                }

                /// <summary>
                /// Copies the fixed array to a new string, stopping before the first null terminator character or at the end of the fixed array (whichever is shorter).
                /// </summary>
                public override readonly unsafe string ToString()
                {
                    int length;
                    fixed (char* p = &_0)
                    {
                        char* pLastExclusive = p + Length;
                        char* pCh = p;
                        for (;
                        pCh < pLastExclusive && *pCh != '\0';
                        pCh++) ;
                        length = checked((int)(pCh - p));
                    }
                    return ToString(length);
                }
            }

            [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
            internal partial struct __char_256
            {
                internal char _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, _83, _84, _85, _86, _87, _88, _89, _90, _91, _92, _93, _94, _95, _96, _97, _98, _99, _100, _101, _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, _118, _119, _120, _121, _122, _123, _124, _125, _126, _127, _128, _129, _130, _131, _132, _133, _134, _135, _136, _137, _138, _139, _140, _141, _142, _143, _144, _145, _146, _147, _148, _149, _150, _151, _152, _153, _154, _155, _156, _157, _158, _159, _160, _161, _162, _163, _164, _165, _166, _167, _168, _169, _170, _171, _172, _173, _174, _175, _176, _177, _178, _179, _180, _181, _182, _183, _184, _185, _186, _187, _188, _189, _190, _191, _192, _193, _194, _195, _196, _197, _198, _199, _200, _201, _202, _203, _204, _205, _206, _207, _208, _209, _210, _211, _212, _213, _214, _215, _216, _217, _218, _219, _220, _221, _222, _223, _224, _225, _226, _227, _228, _229, _230, _231, _232, _233, _234, _235, _236, _237, _238, _239, _240, _241, _242, _243, _244, _245, _246, _247, _248, _249, _250, _251, _252, _253, _254, _255;

                /// <summary>Always <c>256</c>.</summary>
                internal readonly int Length => 256;

                /// <summary>
                /// Copies the fixed array to a new string up to the specified length regardless of whether there are null terminating characters.
                /// </summary>
                /// <exception cref="ArgumentOutOfRangeException">
                /// Thrown when <paramref name="length"/> is less than <c>0</c> or greater than <see cref="Length"/>.
                /// </exception>
                internal unsafe readonly string ToString(int length)
                {
                    if (length < 0 || length > Length) throw new ArgumentOutOfRangeException(nameof(length), length, "Length must be between 0 and the fixed array length.");
                    fixed (char* p0 = &_0)
                        return new string(p0, 0, length);
                }

                /// <summary>
                /// Copies the fixed array to a new string, stopping before the first null terminator character or at the end of the fixed array (whichever is shorter).
                /// </summary>
                public override readonly unsafe string ToString()
                {
                    int length;
                    fixed (char* p = &_0)
                    {
                        char* pLastExclusive = p + Length;
                        char* pCh = p;
                        for (;
                        pCh < pLastExclusive && *pCh != '\0';
                        pCh++) ;
                        length = checked((int)(pCh - p));
                    }
                    return ToString(length);
                }
            }

            [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
            internal partial struct __char_64
            {
                internal char _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63;

                /// <summary>Always <c>64</c>.</summary>
                internal readonly int Length => 64;

                /// <summary>
                /// Copies the fixed array to a new string up to the specified length regardless of whether there are null terminating characters.
                /// </summary>
                /// <exception cref="ArgumentOutOfRangeException">
                /// Thrown when <paramref name="length"/> is less than <c>0</c> or greater than <see cref="Length"/>.
                /// </exception>
                internal unsafe readonly string ToString(int length)
                {
                    if (length < 0 || length > Length) throw new ArgumentOutOfRangeException(nameof(length), length, "Length must be between 0 and the fixed array length.");
                    fixed (char* p0 = &_0)
                        return new string(p0, 0, length);
                }

                /// <summary>
                /// Copies the fixed array to a new string, stopping before the first null terminator character or at the end of the fixed array (whichever is shorter).
                /// </summary>
                public override readonly unsafe string ToString()
                {
                    int length;
                    fixed (char* p = &_0)
                    {
                        char* pLastExclusive = p + Length;
                        char* pCh = p;
                        for (;
                        pCh < pLastExclusive && *pCh != '\0';
                        pCh++) ;
                        length = checked((int)(pCh - p));
                    }
                    return ToString(length);
                }
            }

            [StructLayout(LayoutKind.Explicit, Pack = 1)]
            internal partial struct _Anonymous_e__Union
            {
                [FieldOffset(0)]
                internal uint uTimeout;
                [FieldOffset(0)]
                internal uint uVersion;
            }
        }

        /// <summary>Contains information that the system needs to display notifications in the notification area. Used by Shell_NotifyIcon.</summary>
        /// <remarks>
        /// <para>See <a href="https://msdn.microsoft.com/library/aa511497.aspx">Notifications</a> in the Windows User Experience Interaction Guidelines for more information on notification UI and content best practices. If you set the <b>NIF_INFO</b> flag in the <b>uFlags</b> member, the balloon-style notification is used. For more discussion of these notifications, see <a href="https://docs.microsoft.com/windows/desktop/Controls/using-tooltip-contro">Balloon tooltips</a>. No more than one balloon notification at a time can be displayed for the taskbar. If an application attempts to display a notification when one is already being displayed, the new notification is queued and displayed when the older notification goes away. In versions of Windows before Windows Vista, the new notification would not appear until the existing notification has been visible for at least the system minimum timeout length, regardless of the original notification's <b>uTimeout</b> value. If the user does not appear to be using the computer, the system does not count this time toward the timeout. Several members of this structure are only supported for Windows 2000 and later. To enable these members, include one of the following lines in your header:</para>
        /// <para></para>
        /// <para>This doc was truncated.</para>
        /// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#">Read more on docs.microsoft.com</see>.</para>
        /// </remarks>
        internal partial struct NOTIFYICONDATAW64
        {
            /// <summary>
            /// <para>Type: <b>DWORD</b> The size of this structure, in bytes.</para>
            /// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
            /// </summary>
            internal uint cbSize;
            /// <summary>
            /// <para>Type: <b>HWND</b> A handle to the window that receives notifications associated with an icon in the notification area.</para>
            /// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
            /// </summary>
            internal winmdroot.Foundation.HWND hWnd;
            /// <summary>
            /// <para>Type: <b>UINT</b> The application-defined identifier of the taskbar icon. The Shell uses either (<b>hWnd</b> plus <b>uID</b>) or <b>guidItem</b> to identify which icon to operate on when <a href="https://docs.microsoft.com/windows/desktop/api/shellapi/nf-shellapi-shell_notifyicona">Shell_NotifyIcon</a> is invoked. You can have multiple icons associated with a single <b>hWnd</b> by assigning each a different <b>uID</b>. If <b>guidItem</b> is specified, <b>uID</b> is ignored.</para>
            /// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
            /// </summary>
            internal uint uID;
            /// <summary>Type: <b>UINT</b></summary>
            internal winmdroot.UI.Shell.NOTIFY_ICON_DATA_FLAGS uFlags;
            /// <summary>
            /// <para>Type: <b>UINT</b> An application-defined message identifier. The system uses this identifier to send notification messages to the window identified in <b>hWnd</b>. These notification messages are sent when a mouse event or hover occurs in the bounding rectangle of the icon, when the icon is selected or activated with the keyboard, or when those actions occur in the balloon notification.</para>
            /// <para>When the <b>uVersion</b> member is either 0 or NOTIFYICON_VERSION, the <i>wParam</i> parameter of the message contains the identifier of the taskbar icon in which the event occurred. This identifier can be 32 bits in length. The <i>lParam</i> parameter holds the mouse or keyboard message associated with the event. For example, when the pointer moves over a taskbar icon, <i>lParam</i> is set to <a href="https://docs.microsoft.com/windows/desktop/inputdev/wm-mousemove">WM_MOUSEMOVE</a>. When the <b>uVersion</b> member is NOTIFYICON_VERSION_4, applications continue to receive notification events in the form of application-defined messages through the <b>uCallbackMessage</b> member, but the interpretation of the <i>lParam</i> and <i>wParam</i> parameters of that message is changed as follows: </para>
            /// <para>This doc was truncated.</para>
            /// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
            /// </summary>
            internal uint uCallbackMessage;
            /// <summary>
            /// <para>Type: <b>HICON</b> A handle to the icon to be added, modified, or deleted. Windows XP and later support icons of up to 32 BPP. If only a 16x16 pixel icon is provided, it is scaled to a larger size in a system set to a high dpi value. This can lead to an unattractive result. It is recommended that you provide both a 16x16 pixel icon and a 32x32 icon in your resource file. Use <a href="https://docs.microsoft.com/windows/desktop/api/commctrl/nf-commctrl-loadiconmetric">LoadIconMetric</a> to ensure that the correct icon is loaded and scaled appropriately. See Remarks for a code example.</para>
            /// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
            /// </summary>
            internal winmdroot.UI.WindowsAndMessaging.HICON hIcon;
            /// <summary>
            /// <para>Type: <b>TCHAR[64]</b> A null-terminated string that specifies the text for a standard tooltip. It can have a maximum of 64 characters, including the terminating null character.</para>
            /// <para>For Windows 2000 and later, <b>szTip</b> can have a maximum of 128 characters, including the terminating null character.</para>
            /// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
            /// </summary>
            internal __char_128 szTip;
            /// <summary>Type: <b>DWORD</b></summary>
            internal uint dwState;
            /// <summary>
            /// <para>Type: <b>DWORD</b> <b>Windows 2000 and later</b>. A value that specifies which bits of the <b>dwState</b> member are retrieved or modified. The possible values are the same as those for <b>dwState</b>. For example, setting this member to <b>NIS_HIDDEN</b> causes only the item's hidden state to be modified while the icon sharing bit is ignored regardless of its value.</para>
            /// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
            /// </summary>
            internal uint dwStateMask;
            /// <summary>
            /// <para>Type: <b>TCHAR[256]</b> <b>Windows 2000 and later</b>. A null-terminated string that specifies the text to display in a balloon notification. It can have a maximum of 256 characters, including the terminating null character, but should be restricted to 200 characters in English to accommodate localization. To remove the balloon notification from the UI, either delete the icon (with <a href="https://docs.microsoft.com/windows/desktop/api/shellapi/nf-shellapi-shell_notifyicona">NIM_DELETE</a>) or set the <b>NIF_INFO</b> flag in <b>uFlags</b> and set <b>szInfo</b> to an empty string.</para>
            /// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
            /// </summary>
            internal __char_256 szInfo;
            internal winmdroot.UI.Shell.NOTIFYICONDATAW64._Anonymous_e__Union Anonymous;
            /// <summary>
            /// <para>Type: <b>TCHAR[64]</b> <b>Windows 2000 and later</b>. A null-terminated string that specifies a title for a balloon notification. This title appears in a larger font immediately above the text. It can have a maximum of 64 characters, including the terminating null character, but should be restricted to 48 characters in English to accommodate localization.</para>
            /// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
            /// </summary>
            internal __char_64 szInfoTitle;
            /// <summary>
            /// <para>Type: <b>DWORD</b> <b>Windows 2000 and later</b>. Flags that can be set to modify the behavior and appearance of a balloon notification. The icon is placed to the left of the title. If the <b>szInfoTitle</b> member is zero-length, the icon is not shown.</para>
            /// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
            /// </summary>
            internal uint dwInfoFlags;
            /// <summary>
            /// <para>Type: <b>GUID</b> <b>Windows XP and later</b>.</para>
            /// <para></para>
            /// <para>This doc was truncated.</para>
            /// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
            /// </summary>
            internal global::System.Guid guidItem;
            /// <summary>
            /// <para>Type: <b>HICON</b> <b>Windows Vista and later</b>. The handle of a customized notification icon provided by the application that should be used independently of the notification area icon. If this member is non-NULL and the NIIF_USER flag is set in the <b>dwInfoFlags</b> member, this icon is used as the notification icon. If this member is <b>NULL</b>, the legacy behavior is carried out.</para>
            /// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
            /// </summary>
            internal winmdroot.UI.WindowsAndMessaging.HICON hBalloonIcon;

            [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
            internal partial struct __char_128
            {
                internal char _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, _83, _84, _85, _86, _87, _88, _89, _90, _91, _92, _93, _94, _95, _96, _97, _98, _99, _100, _101, _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, _118, _119, _120, _121, _122, _123, _124, _125, _126, _127;

                /// <summary>Always <c>128</c>.</summary>
                internal readonly int Length => 128;

                /// <summary>
                /// Copies the fixed array to a new string up to the specified length regardless of whether there are null terminating characters.
                /// </summary>
                /// <exception cref="ArgumentOutOfRangeException">
                /// Thrown when <paramref name="length"/> is less than <c>0</c> or greater than <see cref="Length"/>.
                /// </exception>
                internal unsafe readonly string ToString(int length)
                {
                    if (length < 0 || length > Length) throw new ArgumentOutOfRangeException(nameof(length), length, "Length must be between 0 and the fixed array length.");
                    fixed (char* p0 = &_0)
                        return new string(p0, 0, length);
                }

                /// <summary>
                /// Copies the fixed array to a new string, stopping before the first null terminator character or at the end of the fixed array (whichever is shorter).
                /// </summary>
                public override readonly unsafe string ToString()
                {
                    int length;
                    fixed (char* p = &_0)
                    {
                        char* pLastExclusive = p + Length;
                        char* pCh = p;
                        for (;
                        pCh < pLastExclusive && *pCh != '\0';
                        pCh++) ;
                        length = checked((int)(pCh - p));
                    }
                    return ToString(length);
                }
            }

            [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
            internal partial struct __char_256
            {
                internal char _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, _83, _84, _85, _86, _87, _88, _89, _90, _91, _92, _93, _94, _95, _96, _97, _98, _99, _100, _101, _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, _118, _119, _120, _121, _122, _123, _124, _125, _126, _127, _128, _129, _130, _131, _132, _133, _134, _135, _136, _137, _138, _139, _140, _141, _142, _143, _144, _145, _146, _147, _148, _149, _150, _151, _152, _153, _154, _155, _156, _157, _158, _159, _160, _161, _162, _163, _164, _165, _166, _167, _168, _169, _170, _171, _172, _173, _174, _175, _176, _177, _178, _179, _180, _181, _182, _183, _184, _185, _186, _187, _188, _189, _190, _191, _192, _193, _194, _195, _196, _197, _198, _199, _200, _201, _202, _203, _204, _205, _206, _207, _208, _209, _210, _211, _212, _213, _214, _215, _216, _217, _218, _219, _220, _221, _222, _223, _224, _225, _226, _227, _228, _229, _230, _231, _232, _233, _234, _235, _236, _237, _238, _239, _240, _241, _242, _243, _244, _245, _246, _247, _248, _249, _250, _251, _252, _253, _254, _255;

                /// <summary>Always <c>256</c>.</summary>
                internal readonly int Length => 256;

                /// <summary>
                /// Copies the fixed array to a new string up to the specified length regardless of whether there are null terminating characters.
                /// </summary>
                /// <exception cref="ArgumentOutOfRangeException">
                /// Thrown when <paramref name="length"/> is less than <c>0</c> or greater than <see cref="Length"/>.
                /// </exception>
                internal unsafe readonly string ToString(int length)
                {
                    if (length < 0 || length > Length) throw new ArgumentOutOfRangeException(nameof(length), length, "Length must be between 0 and the fixed array length.");
                    fixed (char* p0 = &_0)
                        return new string(p0, 0, length);
                }

                /// <summary>
                /// Copies the fixed array to a new string, stopping before the first null terminator character or at the end of the fixed array (whichever is shorter).
                /// </summary>
                public override readonly unsafe string ToString()
                {
                    int length;
                    fixed (char* p = &_0)
                    {
                        char* pLastExclusive = p + Length;
                        char* pCh = p;
                        for (;
                        pCh < pLastExclusive && *pCh != '\0';
                        pCh++) ;
                        length = checked((int)(pCh - p));
                    }
                    return ToString(length);
                }
            }

            [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
            internal partial struct __char_64
            {
                internal char _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63;

                /// <summary>Always <c>64</c>.</summary>
                internal readonly int Length => 64;

                /// <summary>
                /// Copies the fixed array to a new string up to the specified length regardless of whether there are null terminating characters.
                /// </summary>
                /// <exception cref="ArgumentOutOfRangeException">
                /// Thrown when <paramref name="length"/> is less than <c>0</c> or greater than <see cref="Length"/>.
                /// </exception>
                internal unsafe readonly string ToString(int length)
                {
                    if (length < 0 || length > Length) throw new ArgumentOutOfRangeException(nameof(length), length, "Length must be between 0 and the fixed array length.");
                    fixed (char* p0 = &_0)
                        return new string(p0, 0, length);
                }

                /// <summary>
                /// Copies the fixed array to a new string, stopping before the first null terminator character or at the end of the fixed array (whichever is shorter).
                /// </summary>
                public override readonly unsafe string ToString()
                {
                    int length;
                    fixed (char* p = &_0)
                    {
                        char* pLastExclusive = p + Length;
                        char* pCh = p;
                        for (;
                        pCh < pLastExclusive && *pCh != '\0';
                        pCh++) ;
                        length = checked((int)(pCh - p));
                    }
                    return ToString(length);
                }
            }

            [StructLayout(LayoutKind.Explicit)]
            internal partial struct _Anonymous_e__Union
            {
                [FieldOffset(0)]
                internal uint uTimeout;
                [FieldOffset(0)]
                internal uint uVersion;
            }
        }
    }
}
