using System.Runtime.InteropServices; using Decal.Interop.Input; namespace Decal.DecalInput { [ComVisible(true)] [Guid("F3170E85-517E-43A4-B7B4-6F006A7B1B85")] [ClassInterface(ClassInterfaceType.None)] [ComSourceInterfaces(typeof(IWinMsgHookEvents))] [ProgId("DecalInput.WinMsgHook")] public class WinMsgHookImpl : IWinMsgHook { private object _tag; private bool _enabled; public event IWinMsgHookEvents_MessageEventHandler Message; public object Tag { get => _tag; set => _tag = value; } public bool Enabled { get => _enabled; set { if (value == _enabled) return; _enabled = value; if (InputServiceImpl.Instance != null) { if (_enabled) InputServiceImpl.Instance.RegisterMsgHook(this); else InputServiceImpl.Instance.UnregisterMsgHook(this); } } } internal void FireMessage(WinMsgHookImpl hook, WndMsgImpl msg) { Message?.Invoke((WinMsgHook)(object)hook, (WndMsg)(object)msg); } } }