openDecal/Managed/Decal.DecalInput/WinMsgHookImpl.cs
erik d1442e3747 Initial commit: Complete open-source Decal rebuild
All 5 phases of the open-source Decal rebuild:

Phase 1: 14 decompiled .NET projects (Interop.*, Adapter, FileService, DecalUtil)
Phase 2: 10 native DLLs rewritten as C# COM servers with matching GUIDs
  - DecalDat, DHS, SpellFilter, DecalInput, DecalNet, DecalFilters
  - Decal.Core, DecalControls, DecalRender, D3DService
Phase 3: C++ shims for Inject.DLL (D3D9 hooking) and LauncherHook.DLL
Phase 4: DenAgent WinForms tray application
Phase 5: WiX installer and build script

25 C# projects building with 0 errors.
Native C++ projects require VS 2022 + Windows SDK (x86).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:27:56 +01:00

47 lines
1.2 KiB
C#

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);
}
}
}