Конвертация char в Virtual-Key Code для unicode

223
25 января 2018, 16:30

Необходимо передать WM_KEYDOWN через SendMessage, имея unicode char независимо от выбранной пользователем раскладки клавиатуры в конкретное окно.

IntPtr hwnd = ...;
char ch = 'я';
int keyCode = ch.???;    
NativeMethods.SendMessage(hwnd, WM_KEYDOWN, keyCode, ...);

Как сконвертировать char в Virtual Key Code? VkKeyScan не подходит, т.к. он зависит от выбранной пользователем раскладки клавиатуры.

Answer 1
    public static Keys ConvertCharToVirtualKey(char ch) {
    short vkey = VkKeyScan(ch);
    Keys retval = (Keys)(vkey & 0xff);
    int modifiers = vkey >> 8;
    if ((modifiers & 1) != 0) retval |= Keys.Shift;
    if ((modifiers & 2) != 0) retval |= Keys.Control;
    if ((modifiers & 4) != 0) retval |= Keys.Alt;
    return retval;
}
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern short VkKeyScan(char ch);
READ ALSO
Как добавить в visual studio 2015 вывод дебажной информации в самом редакторе?

Как добавить в visual studio 2015 вывод дебажной информации в самом редакторе?

Как добавить показ дебажной информации в Visual Studio 2015 непосредственно в редакторе кода а не в отдельной панелиХотелось бы как например а Intelij...

299
Синтезатор своей речи C#

Синтезатор своей речи C#

Как написать синтезатор, который вместо встроенных голосов будет использовать мой собственный?

228
Как для visual studio 2015 настроить открытие кода библиотек а не обозревателя обьектов

Как для visual studio 2015 настроить открытие кода библиотек а не обозревателя обьектов

У меня установлен Rechaper и visual studio 2015 при Ctrl + right click по какому то объекту студия открывает код этого объектаНо если этот объект системный или...

227
MSSQL инкремент значения

MSSQL инкремент значения

Как инкрементировать значение поля в БД MSSQL с использованием LinqВариант с прочитать-прибавить-записать не подходит ввиду одновременного...

254