2012-01-11 3 views
1

Я сделал клавиатуру в Windows. Формы со многими кнопками, а их содержимое - разные символы алфавита, как настоящая клавиатура.Sendkeys отправляет no или несколько строк

Теперь проблема в том, что я использую клавиатуру в 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, что я мог бы попробовать?

+0

Ах, много впустую усилий. Windows уже предлагает приложение на экране. Все, что вам нужно, это 'Process.Start (« osk.exe »)'. Он отлично работает каждый раз, не нужно «SendKeys». –

+0

Привет, Коди Грей, спасибо за ваш ответ. Оск из windows xp слишком мал для моего сенсорного экрана. Вы не можете изменить его размер. –

+0

Вы подтвердили, что на сенсорном устройстве происходят события нажатия кнопки? –

ответ

2

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

-1

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

Вот пример: PostMessage WM_KEYDOWN send multiply keys?

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