模拟键盘事件

发布于 2024-10-05 20:04:02 字数 1483 浏览 6 评论 0原文

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

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

帮忙 谢谢, 尼基尔

I am trying to insert string values to a third party application say, notepad. Below is the code that I am using

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


    }

I am giving a sample text message For example "This is a test Message".
I am getting the proper ascii values.
But in the target text box for the corresponding sample message I am getting this output.

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

Could some one help to solve this. I am also putting the ascii values printed in console

Messsage :This is a test message

{
Ascii Values = 84

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

Please Somebody help
Thanks,
Nikil

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

回眸一笑 2024-10-12 20:04:02

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

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

keybd_event has been superseded by SendInput. I would recommend taking a look at the Windows Input Simulator which provides a nice C# Wrapper around the Send Input API. You can also simulate Mouse movements with the SendInput API (and something I believe they're working on for the next version of the Input Simulator).

I've used this library for an automation project and it seems to work pretty well, however there are some quirks (IE the keystoke HOME + SHIFT + END does not select all text as expected).

宣告ˉ结束 2024-10-12 20:04:02

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

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

keybd_event's first argument is a virtual key code, not an ASCII code. Some of the VK are same as ASCII (that's why you get the first t!), but this is not the way to do it.

One way to achieve what you want is to use the SendInput method. To this method you can pass a KEYBDINPUT which has a field for passing Unicode characters (if you specify the KEYEVENTF_UNICODE flag).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文