Detección de cambios de texto en Word 2016 desde el complemento VSTO

Esta pregunta está muy relacionada con¿Cómo obtener el evento "KeyPress" de un complemento de Word 2010 (desarrollado en C #)? (y de hecho incluye el código de muestra de la respuesta a esa pregunta), pero se trata específicamente del desarrollo en Visual Studio (Professional) 2015 para Word 2016 que se ejecuta en Windows 10.

Estoy tratando de detectar cuándo el texto cambia en un documento de Word desde un complemento VSTO. Entiendo de

¿Cómo obtener el evento "KeyPress" de un complemento de Word 2010 (desarrollado en C #)? (14 de noviembre de 2011)Capturando evento keydown de MS Word usando C # (21 de octubre de 2012)Cómo generar un evento en MS Word Keypress (24 de octubre de 2012)¿Cómo atrapar el evento de pulsación de tecla en MSword usando VSTO? (5 de noviembre de 2012)

que no hay forma de hacer esto por eventos. Word simplemente no envía eventos cuando el texto cambia.

He visto dos soluciones alternativas discutidas:

Utilizar elWindowSelectionChange evento. Desafortunadamente, este evento parece enviarse cuando se cambia la selección presionando las teclas de flecha, usando el mouse, realizando deshacer o rehacer, y probablemente otras acciones, pero no al escribir o eliminar.Use un enlace de evento de keydown de bajo nivel. Esto ha sido discutido en varias de esas preguntas de StackOverflow, y también fue llamado una "técnica ampliamente difundida" enun hilo en un foro de Visual Studio en febrero de 2014.

Estoy tratando de usar el código en la respuesta a¿Cómo obtener el evento "KeyPress" de un complemento de Word 2010 (desarrollado en C #)?, y parece observar cada evento keydownexcepto los enviados a Word 2016.

Aquí está el código que estoy usando, para facilitar la referencia.

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows.Forms;

namespace KeydownWordAddIn
{
    public partial class ThisAddIn
    {
        private const int WH_KEYBOARD_LL = 13;
        private const int WM_KEYDOWN = 0x0100;

        private static IntPtr hookId = IntPtr.Zero;
        private delegate IntPtr HookProcedure(int nCode, IntPtr wParam, IntPtr lParam);
        private static HookProcedure procedure = HookCallback;

        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr GetModuleHandle(string lpModuleName);

        [DllImport("user32.dll", SetLastError = true)]
        private static extern bool UnhookWindowsHookEx(IntPtr hhk);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr SetWindowsHookEx(int idHook, HookProcedure lpfn, IntPtr hMod, uint dwThreadId);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);

        private static IntPtr SetHook(HookProcedure procedure)
        {
            using (Process process = Process.GetCurrentProcess())
            using (ProcessModule module = process.MainModule)
                return SetWindowsHookEx(WH_KEYBOARD_LL, procedure, GetModuleHandle(module.ModuleName), 0);
        }

        private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
        {
            if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
            {
                int pointerCode = Marshal.ReadInt32(lParam);
                string pressedKey = ((Keys)pointerCode).ToString();

                // Do some sort of processing on key press.
                var thread = new Thread(() => {
                    Debug.WriteLine(pressedKey);
                });
                thread.Start();
            }
            return CallNextHookEx(hookId, nCode, wParam, lParam);
        }

        private void ThisAddIn_Startup(object sender, EventArgs e)
        {
            hookId = SetHook(procedure);
        }

        private void ThisAddIn_Shutdown(object sender, EventArgs e)
        {
            UnhookWindowsHookEx(hookId);
        }

        #region VSTO generated code
        /// <summary>
        /// Required method for Designer support.
        /// </summary>
        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }
        #endregion
    }
}

Cuando ejecuto Word 2016 con este complemento, veo eventos keydown enviados al navegador Edge e incluso a Visual Studio, pero no a Word en sí.

¿Se evitan de alguna manera los ganchos de keydown en Word 2016, o estoy haciendo algo mal?