Sendkeys.Send () для правильного alt ключа? какие-нибудь альтернативы? - PullRequest
1 голос
/ 17 февраля 2012

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

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

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

Ответы [ 4 ]

2 голосов
/ 17 февраля 2012

Вам не нужно имитировать нажатия клавиш 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)];

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

1 голос
/ 17 февраля 2012

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

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

Документация MSDN для ActivateKeyboardLayout: здесь .

А подписи P / Invoke можно найти здесь .

1 голос
/ 17 февраля 2012

MSDN дает запись перечисления RMenu для правого альт.

1 голос
/ 17 февраля 2012

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

Вам нужно будет 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); 
...