【问题标题】:Simulate Keyboard Event模拟键盘事件
【发布时间】:2011-05-19 03:54:23
【问题描述】:

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

[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
}

请有人帮忙 谢谢, 尼基尔

【问题讨论】:

  • 这是一个使用SendKeys的示例。

标签: .net events keyboard virtual keypress


【解决方案1】:

keybd_event 已被SendInput 取代。我建议看一下Windows Input Simulator,它为发送输入 API 提供了一个不错的 C# 包装器。您还可以使用 SendInput API 模拟鼠标移动(我相信他们正在为下一版本的 Input Simulator 工作)。

我已经将此库用于自动化项目,它似乎工作得很好,但是有一些怪癖(即按键 HOME + SHIFT + END 没有按预期选择所有文本)。

【讨论】:

【解决方案2】:

keybd_event 的第一个参数是虚拟键码,而不是 ASCII 码。一些 VK 与 ASCII 相同(这就是你得到第一个 t 的原因!),但这不是这样做的方法。

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

【讨论】:

  • 非常感谢。你帮助我发现了我的错误。 SendKeys 比我以前做的更简单。
猜你喜欢
  • 1970-01-01
  • 2013-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-12
  • 1970-01-01
  • 2021-11-30
  • 2011-12-01
相关资源
最近更新 更多