Sendkeys не отправляет несколько строк или не отправляет их

Я сделал клавиатуру в Windows.Forms с множеством кнопок, и их содержимое - это разные символы алфавита, как настоящая клавиатура.

Теперь проблема в том, что когда я использую клавиатуру в Windows 7, все работает отлично. Но когда я использую клавиатуру на сенсорном экране с Windows XP, клавиатура несколько раз записывает содержимое только что нажатой кнопки или ничего не пишет внутри текстового поля.

Вот пример кода:

Button temp = sender as Button;
SendKeys.SendWait(temp.Text);

Я пробовал SendKeys.Flush и

<appSettings>

<add key="SendKeys" value="SendInput"/>
</appSettings>

внутри app.config

это решение здесь msdn< /а>. Но это не решило проблему.

Что я делаю не так?

Редактировать: теперь я узнал, что первая буква всегда работает отлично. После этого все становится ужасно. Есть ли что-то еще, кроме SendKeys.Flush, что я мог бы попробовать?


person Knut Hansen    schedule 11.01.2012    source источник
comment
Эх, много потраченных усилий. Windows уже предоставляет приложение для экранной клавиатуры. Все, что вам нужно, это Process.Start("osk.exe"). Он работает отлично каждый раз, нет необходимости в SendKeys.   -  person Cody Gray    schedule 11.01.2012
comment
Привет Коди Грей, спасибо за ваш ответ. Оск от windows xp маловат для моего тачскрина. Вы не можете изменить его размер.   -  person Knut Hansen    schedule 11.01.2012
comment
Вы проверили, что события нажатия кнопки происходят на сенсорном устройстве, как и ожидалось?   -  person Kerry H    schedule 11.01.2012
comment
Да, у меня есть. И если бы события щелчка не были правильными, первая буква, которую я нажимаю, была бы неправильной.   -  person Knut Hansen    schedule 12.01.2012


Ответы (2)


Вы теряете фокус после первой буквы... сбросьте фокус на цель перед вызовом SendWait.

person anon    schedule 28.02.2012

Функция sendkeys действительно не лучшая из функций. Использование winApi и, в частности, PostMessage окажется лучше.

Вот пример: PostMessage WM_KEYDOWN отправляет несколько ключей?

Вы будете работать более непосредственно с очередью сообщений, но это также означает, что вам придется заниматься дополнительными вещами, такими как макет/локализация.

person squelos    schedule 28.02.2012