| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 | using System;using System.Runtime.InteropServices;namespace Hardcodet.Wpf.TaskbarNotification.Interop{    /// <summary>    /// A struct that is submitted in order to configure    /// the taskbar icon. Provides various members that    /// can be configured partially, according to the    /// values of the <see cref="IconDataMembers"/>    /// that were defined.    /// </summary>    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]    public struct NotifyIconData    {        /// <summary>        /// Size of this structure, in bytes.        /// </summary>        public uint cbSize;        /// <summary>        /// Handle to the window that receives notification messages associated with an icon in the        /// taskbar status area. The Shell uses hWnd and uID to identify which icon to operate on        /// when Shell_NotifyIcon is invoked.        /// </summary>        public IntPtr WindowHandle;        /// <summary>        /// Application-defined identifier of the taskbar icon. The Shell uses hWnd and uID to identify        /// which icon to operate on when Shell_NotifyIcon is invoked. You can have multiple icons        /// associated with a single hWnd by assigning each a different uID. This feature, however        /// is currently not used.        /// </summary>        public uint TaskbarIconId;        /// <summary>        /// Flags that indicate which of the other members contain valid data. This member can be        /// a combination of the NIF_XXX constants.        /// </summary>        public IconDataMembers ValidMembers;        /// <summary>        /// Application-defined message identifier. The system uses this identifier to send        /// notifications to the window identified in hWnd.        /// </summary>        public uint CallbackMessageId;        /// <summary>        /// A handle to the icon that should be displayed. Just        /// <c>Icon.Handle</c>.        /// </summary>        public IntPtr IconHandle;        /// <summary>        /// String with the text for a standard ToolTip. It can have a maximum of 64 characters including        /// the terminating NULL. For Version 5.0 and later, szTip can have a maximum of        /// 128 characters, including the terminating NULL.        /// </summary>        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]        public string ToolTipText;        /// <summary>        /// State of the icon. Remember to also set the <see cref="StateMask"/>.        /// </summary>        public IconState IconState;        /// <summary>        /// A value that specifies which bits of the state member are retrieved or modified.        /// For example, setting this member to <see cref="TaskbarNotification.Interop.IconState.Hidden"/>        /// causes only the item's hidden        /// state to be retrieved.        /// </summary>        public IconState StateMask;        /// <summary>        /// String with the text for a balloon ToolTip. It can have a maximum of 255 characters.        /// To remove the ToolTip, set the NIF_INFO flag in uFlags and set szInfo to an empty string.        /// </summary>        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]        public string BalloonText;        /// <summary>        /// Mainly used to set the version when <see cref="WinApi.Shell_NotifyIcon"/> is invoked        /// with <see cref="NotifyCommand.SetVersion"/>. However, for legacy operations,        /// the same member is also used to set timeouts for balloon ToolTips.        /// </summary>        public uint VersionOrTimeout;        /// <summary>        /// String containing a title for a balloon ToolTip. This title appears in boldface        /// above the text. It can have a maximum of 63 characters.        /// </summary>        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]        public string BalloonTitle;        /// <summary>        /// Adds an icon to a balloon ToolTip, which is placed to the left of the title. If the        /// <see cref="BalloonTitle"/> member is zero-length, the icon is not shown.        /// </summary>        public BalloonFlags BalloonFlags;        /// <summary>        /// Windows XP (Shell32.dll version 6.0) and later.<br/>        /// - Windows 7 and later: A registered GUID that identifies the icon.        ///   This value overrides uID and is the recommended method of identifying the icon.<br/>        /// - Windows XP through Windows Vista: Reserved.        /// </summary>        public Guid TaskbarIconGuid;        /// <summary>        /// Windows Vista (Shell32.dll version 6.0.6) and later. The handle of a customized        /// balloon icon provided by the application that should be used independently        /// of the tray icon. If this member is non-NULL and the <see cref="TaskbarNotification.Interop.BalloonFlags.User"/>        /// flag is set, this icon is used as the balloon icon.<br/>        /// If this member is NULL, the legacy behavior is carried out.        /// </summary>        public IntPtr CustomBalloonIconHandle;        /// <summary>        /// Creates a default data structure that provides        /// a hidden taskbar icon without the icon being set.        /// </summary>        /// <param name="handle"></param>        /// <returns>NotifyIconData</returns>        public static NotifyIconData CreateDefault(IntPtr handle)        {            var data = new NotifyIconData();            if (Environment.OSVersion.Version.Major >= 6)            {                //use the current size                data.cbSize = (uint) Marshal.SizeOf(data);            }            else            {                //we need to set another size on xp/2003- otherwise certain                //features (e.g. balloon tooltips) don't work.                data.cbSize = 952; // NOTIFYICONDATAW_V3_SIZE                //set to fixed timeout                data.VersionOrTimeout = 10;            }            data.WindowHandle = handle;            data.TaskbarIconId = 0x0;            data.CallbackMessageId = WindowMessageSink.CallbackMessageId;            data.VersionOrTimeout = (uint) NotifyIconVersion.Win95;            data.IconHandle = IntPtr.Zero;            //hide initially            data.IconState = IconState.Hidden;            data.StateMask = IconState.Hidden;            //set flags            data.ValidMembers = IconDataMembers.Message                                | IconDataMembers.Icon                                | IconDataMembers.Tip;            //reset strings            data.ToolTipText = data.BalloonText = data.BalloonTitle = string.Empty;            return data;        }    }}
 |