Имитация события клавиатуры - PullRequest
1 голос
/ 02 декабря 2010

Я пытаюсь вставить строковые значения в стороннее приложение, скажем, блокнот.Ниже приведен код, который я использую

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

Пожалуйста, кто-нибудь помогите Спасибо, Никил

Ответы [ 2 ]

1 голос
/ 22 апреля 2011

keybd_event заменено на SendInput . Я бы порекомендовал взглянуть на Windows Input Simulator , который предоставляет хороший C # Wrapper вокруг API Send Input. Вы также можете смоделировать движения мыши с помощью API SendInput (и я полагаю, что они работают над следующей версией Симулятора ввода).

Я использовал эту библиотеку для проекта автоматизации, и она, кажется, работает довольно хорошо, однако есть некоторые странности (т. Е. Нажатие клавиши HOME + SHIFT + END не выделяет весь текст должным образом).

0 голосов
/ 02 декабря 2010

Первый аргумент keybd_event - это код виртуального ключа, а не код ASCII.Некоторые из VK такие же, как ASCII (вот почему вы получаете первое t!), Но это не способ сделать это.

Один из способов добиться того, чего вы хотите, это использовать SendInput метод.В этот метод вы можете передать KEYBDINPUT, в котором есть поле для передачи символов Unicode (если вы указали флаг KEYEVENTF_UNICODE).

...