using System; using System.Runtime.InteropServices; using System.Text; // ReSharper disable FieldCanBeMadeReadOnly.Global ReSharper disable InconsistentNaming namespace Vanara.PInvoke { public static partial class User32 { /// The services requested in a structure. [Flags] public enum TME : uint { /// /// The caller wants to cancel a prior tracking request. The caller should also specify the type of tracking that it wants to cancel. For example, to /// cancel hover tracking, the caller must pass the TME_CANCEL and TME_HOVER flags. /// TME_CANCEL = 0x80000000, /// /// The caller wants hover notification. Notification is delivered as a WM_MOUSEHOVER message. /// If the caller requests hover tracking while hover tracking is already active, the hover timer will be reset. /// This flag is ignored if the mouse pointer is not over the specified window or area. /// TME_HOVER = 0x00000001, /// /// The caller wants leave notification. Notification is delivered as a WM_MOUSELEAVE message. If the mouse is not over the specified window or area, /// a leave notification is generated immediately and no further tracking is performed. /// TME_LEAVE = 0x00000002, /// /// The caller wants hover and leave notification for the nonclient areas. Notification is delivered as WM_NCMOUSEHOVER and WM_NCMOUSELEAVE messages. /// TME_NONCLIENT = 0x00000010, /// /// The function fills in the structure instead of treating it as a tracking request. The structure is filled such that had that structure been /// passed to TrackMouseEvent, it would generate the current tracking. The only anomaly is that the hover time-out returned is always the actual /// time-out and not HOVER_DEFAULT, if HOVER_DEFAULT was specified during the original TrackMouseEvent request. /// TME_QUERY = 0x40000000, } /// Posts messages when the mouse pointer leaves a window or hovers over a window for a specified amount of time. /// /// Type: LPTRACKMOUSEEVENT /// A pointer to a TRACKMOUSEEVENT structure that contains tracking information. /// /// /// Type: BOOL /// If the function succeeds, the return value is nonzero . /// If the function fails, return value is zero. To get extended error information, call GetLastError. /// // BOOL WINAPI TrackMouseEvent( _Inout_ LPTRACKMOUSEEVENT lpEventTrack); https://msdn.microsoft.com/en-us/library/windows/desktop/ms646265(v=vs.85).aspx [DllImport(Lib.User32, SetLastError = true, ExactSpelling = true)] [PInvokeData("Winuser.h", MSDNShortId = "ms646265")] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool TrackMouseEvent(ref TRACKMOUSEEVENT lpEventTrack); /// /// Used by the TrackMouseEvent function to track when the mouse pointer leaves a window or hovers over a window for a specified amount of time. /// [PInvokeData("Winuser.h", MSDNShortId = "ms645604")] [StructLayout(LayoutKind.Sequential)] public struct TRACKMOUSEEVENT { /// The size of the TRACKMOUSEEVENT structure, in bytes. public uint cbSize; /// The services requested public TME dwFlags; /// A handle to the window to track. public IntPtr hwndTrack; /// /// The hover time-out (if TME_HOVER was specified in dwFlags), in milliseconds. Can be HOVER_DEFAULT, which means to use the system default hover time-out. /// public uint dwHoverTime; } } }