C#中的SendInput方法和RichText Box的退格问题

问题描述

我正在尝试使用 C# 和 sendinput 方法将退格键发送到 RichTextBox 编辑器。


        private static void SendBackSpace(ushort charUnicode)
        {

  
            SEND_INPUT_FOR_32_BIT[] arrInput = new SEND_INPUT_FOR_32_BIT[1];

            KEYBOARD_INPUT_FOR_32_BIT ki = new KEYBOARD_INPUT_FOR_32_BIT();

            ki.VirtualKeyCode = charUnicode; // 0x08 for backspace
            ki.ScanCode = 0;
            ki.Time = 0;
            ki.ExtraInfo =0;

            SEND_INPUT_FOR_32_BIT input = new SEND_INPUT_FOR_32_BIT();
            input.InputType = INPUTTYPE.KEYBOARD;
            input.KeyboardInputStruct = ki;
            arrInput[0] = input;
            sendinput(1,arrInput,Marshal.SizeOf(typeof(SEND_INPUT_FOR_32_BIT)));
            
        }

当我尝试一次发送一个退格键时,它工作正常。但是当我尝试发送两个退格(两次调用方法)时,它只发送一个退格而不是两个。结果只删除一个现有字符,因为当我调用它两次时它应该删除两个。

我正在捕获 RichTextBox 上的 Keypress 事件。令人惊讶的是,当我在普通 TextBox 中使用它时,相同的事件和相同的代码工作得非常好。任何帮助表示赞赏。

已修复:

看起来像 C# 中的 RichTextBox 处理 Keypress 事件的方式与常规 TextBox 略有不同。我用这个修改了上面的代码,现在工作正常。现在我可以使用以下代码在循环中发送多个退格。希望这会对某人有所帮助。

         private static void SendBackSpace(ushort charUnicode)
        {
              SEND_INPUT_FOR_32_BIT[] arrInput = new SEND_INPUT_FOR_32_BIT[2];

            KEYBOARD_INPUT_FOR_32_BIT ki = new KEYBOARD_INPUT_FOR_32_BIT();

            ki.VirtualKeyCode = charUnicode;
            ki.ScanCode = 0;
            ki.Time = 0;
            ki.ExtraInfo = 0;

            SEND_INPUT_FOR_32_BIT input = new SEND_INPUT_FOR_32_BIT();
            input.InputType = INPUTTYPE.KEYBOARD;
            input.KeyboardInputStruct = ki;
            arrInput[0] = input;

            ki.VirtualKeyCode = charUnicode;
            ki.ScanCode = 0;
            ki.Time = 0;
            ki.ExtraInfo = 0;
            ki.Flags = KEYEVENTF.KEYUP;
            input.KeyboardInputStruct = ki;
            arrInput[1] = input;

            sendinput(2,Marshal.SizeOf(typeof(SEND_INPUT_FOR_32_BIT)));

        }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)