首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟键盘事件

模拟键盘事件
EN

Stack Overflow用户
提问于 2010-12-02 14:09:36
回答 2查看 694关注 0票数 1

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

代码语言:javascript
复制
[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 }

有人帮忙谢谢你,尼基尔

EN

回答 2

Stack Overflow用户

发布于 2011-04-22 18:04:34

事件已经被SendInput取代了。我建议您看看Windows输入模拟器,它为Send提供了一个很好的C#包装器。您还可以使用SendInput API模拟鼠标运动(我相信他们正在为下一个版本的输入模拟器而工作)。

我在一个自动化项目中使用了这个库,它似乎运行得很好,但是也有一些奇怪之处(IE keystoke HOME + SHIFT + END并没有像预期的那样选择所有文本)。

票数 1
EN

Stack Overflow用户

发布于 2010-12-02 14:30:29

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

实现目标的一种方法是使用SendInput方法。对于此方法,您可以传递一个KEYBDINPUT,该字段有一个用于传递Unicode字符的字段(如果您指定了KEYEVENTF_UNICODE标志)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4335854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档