2012-02-17 2 views
1

Я работаю над приложением winform для сенсорного экрана. Приложение состоит из веб-браузера и экранной клавиатуры. У меня есть все, что мне нужно, но проблема в том, что есть два языка ввода, английский и корейский. Любой, кто знаком с использованием двух языков, может сказать вам, что правый alt ключ используется для перехода между языками. Мне нужно симулировать это нажатие клавиши, но я ничего не могу найти для этого.Sendkeys.Send() для правой клавиши? любые альтернативы?

Я нашел способы имитации правой сдвига клавиши влево/и влево/вправо Ctrl клавиши. Но ничего для левого/правого alt ключей.

Есть ли у меня альтернативы?

+0

Я использую комбинацию Left Alt/Left Shift для переключения клавиатур с использованием встроенной языковой панели в Windows. Взгляните на диалоговое окно настроек панели языков. Возможно, вы можете установить комбинацию клавиш на то, что вам подходит. –

ответ

1

Вы можете использовать keybd_event с RALT keycode VK_RMENU. Полный список кодов клавиш являются here

Вы должны P/Invoke нажатие клавиши, как это:

[DllImport("user32.dll", SetLastError = true)] 
static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo); 

public const int KEYEVENTF_EXTENDEDKEY = 0x0001; //Key down flag 
public const int KEYEVENTF_KEYUP = 0x0002; //Key up flag 
public const int VK_RMENU = 0xA5; 

keybd_event(VK_RMENU, 0, KEYEVENTF_EXTENDEDKEY, 0); 
keybd_event(VK_RMENU, 0, KEYEVENTF_KEYUP, 0); 
+0

Нет необходимости использовать P/Invoke и изобретать колесо снова! 'Keys.RMenu' эквивалентен' VK_RMENU'. –

+0

Я использовал то, что вы мне дали, и расширенная клавиша работает нормально, но похоже, что она не выпускается. если я что-то набираю и нажимаю backspace, он работает больше как функция отмены. –

1

Вы действительно не хотите, чтобы найти способ, чтобы отправить ключ Alt, не так ли? То, что вы действительно хотите, это изменить язык ввода. В этом случае идите прямо к источнику.

В Windows API есть методы для изменения текущей активной раскладки клавиатуры. Они не являются частью .NET Framework, но вы можете использовать P/Invoke для вызова их из C#.

Документация MSDN для ActivateKeyboardLayout составляет here.

И подписи P/Invoke можно найти here.

+1

Класс 'InputLanguage' делает то, что вы ищете. И он доступен в .NET Framework! –

1

MSDN содержит RMenu запись enum для права-alt.

+0

Я не верю, что работает с sendkey.send –

2

Вам не нужно симулировать нажатия клавиш Alt + Shift для изменения языка ввода. Вы можете использовать InputLanguage класс в System.Windows.Forms пространстве имен:

 var currentLang = InputLanguage.CurrentInputLanguage; 
     var installedLangs = InputLanguage.InstalledInputLanguages; 
     if (installedLangs.Count > 1) 
      InputLanguage.CurrentInputLanguage = 
       installedLangs[1 - installedLangs.IndexOf(currentLang)]; 

Если у вас есть ровно два входных языков установлены, эти фрагменты кода переключается между этими двумя. Вы поняли эту идею. Правильно?

+0

Это круто, мне удалось пропустить этот. Хотя кажется, что это часть среды Winforms. Вероятно, для WPF это эквивалентно. –

+0

Я делаю, потому что сайт заставляет корейский ввод, имеет ли пользователь корейн в качестве активного входа –

Смежные вопросы