SendKeysでは送信できないテンキーなどのキーボード押し下げをエミュレートする方法

https://edutainment-fun.com/hidemaru/microsoft/%E3%82%AD%E3%83%BC%E3%82%A8%E3%83%9F%E3%83%A5%E3%83%AC%E3%83%BC%E3%83%88%E9%80%81%E4%BF%A1%E3%81%AE%E3%81%BE%E3%81%A8%E3%82%81%E3%80%90c%E3%80%91%E3%80%90%E8%A6%9A%E6%9B%B8%E3%83%A1%E3%83%A2%E3%80%91_2535.html
入力されたキャラクタではなく押されたキーボード位置を取得しているプログラムに対して、テンキー入力を送信しようと思ったがSendKeysではそれは実現できかった。
WindowsAPIを使って、以下のようにすれば送信できる。

class SendKeysEx
{
    [System.Runtime.InteropServices.DllImport("user32.dll")]
    private static extern uint keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);

    public static void Send(byte virtualKeyCode)
    {
        // 仮想キーコード
        // http://kts.sakaiweb.com/virtualkeycodes.html
        // https://docs.microsoft.com/ja-jp/windows/win32/inputdev/virtual-key-codes?redirectedfrom=MSDN
        keybd_event(virtualKeyCode, 0, 0, (UIntPtr)0);
        System.Threading.Thread.Sleep(50);
        keybd_event(virtualKeyCode, 0, 2/*KEYEVENTF_KEYUP*/, (UIntPtr)0);
    }
}

// 使用例
//  const byte VK_NUMPAD1 = 0x61;
//  SendKeysEx.Send(VK_NUMPAD1);