.net 模拟键盘事件

.net 模拟键盘事件,.net,events,keyboard,virtual,keypress,.net,Events,Keyboard,Virtual,Keypress,我正在尝试将字符串值插入到第三方应用程序,例如记事本。下面是我正在使用的代码 [DllImport("user32.dll")] static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo); public void sim_type(string txt) { const int KEYEVENTF_EXTENDEDKEY = 0x1;

我正在尝试将字符串值插入到第三方应用程序,例如记事本。下面是我正在使用的代码

[DllImport("user32.dll")]
    static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);

public  void sim_type(string txt)
    {

        const int KEYEVENTF_EXTENDEDKEY = 0x1;
        const int KEYEVENTF_KEYUP = 0x2;
        byte[] ASCIIValues = Encoding.ASCII.GetBytes(txt);

        foreach (byte keyCode in ASCIIValues)
        {
            Console.WriteLine("Ascii Values = " + keyCode);
            keybd_event(keyCode, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr)0);
            keybd_event(keyCode, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, (UIntPtr)0);
        }


    }
我给出了一条示例文本消息,例如“这是一条测试消息”。 我得到了正确的ascii值。 但是在相应示例消息的目标文本框中,我得到了这个输出

t89 9 1 13:38 02/12/2010513:38 02/12/2010-5175

有人能帮忙解决这个问题吗。我还将ascii值打印在控制台中

消息:这是一条测试消息

{
Ascii值=84

Ascii值=104
Ascii值=105
Ascii值=115
Ascii值=32
Ascii值=105
Ascii值=115
Ascii值=32
Ascii值=97
Ascii值=32
Ascii值=116
Ascii值=101
Ascii值=115
Ascii值=116
Ascii值=32
Ascii值=109
Ascii值=101
Ascii值=115
Ascii值=115
Ascii值=97
Ascii值=103
Ascii值=101
}

请有人帮忙 谢谢
Nikil

keybd_事件的第一个参数是虚拟密钥代码,而不是ASCII代码。有些VK与ASCII相同(这就是为什么会得到第一个t!),但这不是实现它的方法


实现您想要的一种方法是使用该方法。您可以向此方法传递一个KeybInput,该输入具有一个用于传递Unicode字符的字段(如果您指定KEYEVENTF_Unicode标志)。

keybd_事件的第一个参数是虚拟密钥代码,而不是ASCII代码。有些VK与ASCII相同(这就是为什么会得到第一个t!),但这不是实现它的方法

实现您想要的一种方法是使用该方法。您可以向此方法传递一个KEYBDINPUT,该输入包含一个用于传递Unicode字符的字段(如果您指定KEYEVENTF_Unicode标志)。

已被替换为。我建议看一下,它为发送输入API提供了一个很好的C#包装器。您还可以使用SendInput API模拟鼠标移动(我相信他们正在为下一版本的输入模拟器开发这一功能)

我在一个自动化项目中使用了这个库,它似乎工作得很好,但也有一些怪癖(即keystoke HOME+SHIFT+END没有按预期选择所有文本)。

已被替换为。我建议看一下,它为发送输入API提供了一个很好的C#包装器。您还可以使用SendInput API模拟鼠标移动(我相信他们正在为下一版本的输入模拟器开发这一功能)


我在一个自动化项目中使用了这个库,它似乎工作得很好,但也有一些奇怪之处(即keystoke HOME+SHIFT+END没有按预期选择所有文本)。

非常感谢。你帮我认错了。SendKeys比我以前做的更简单。非常感谢。你帮我认错了。SendKeys比我以前做的更简单。上面提到的问题实际上是我在这里提交了一个补丁解决的。我仍然强烈推荐这个库给任何想要SendInput一个好的托管接口的人。上面提到的问题实际上是我在这里提交了一个补丁解决的。我仍然强烈推荐这个库任何人都可以使用这个库来寻找一个好的管理界面来发送输入。下面是一个如何使用的示例。下面是一个如何使用的示例。