Получение по ASCII-коду его символ в текущей раскладке.

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

NullPointer
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 09.05.2009 (Сб) 15:03

Получение по ASCII-коду его символ в текущей раскладке.

Сообщение NullPointer » 09.05.2009 (Сб) 15:27

Доброго дня и с праздником!

Есть код нажатой клавиши (64-90), хотелось бы встроенными методами донета преобразовать его в символ,с учетом выбранного в данный момент языка ввода (т.е. Q->Й). Ковырял inputlanguage и cultureinfo — не полегчало :roll:. Как быть?

З.Ы. Определить соответствия вручную — самый-самый крайний вариант.

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Получение по ASCII-коду его символ в текущей раскладке.

Сообщение Williams » 09.05.2009 (Сб) 17:14

Я задавал подобрый вопрос, только в разделе классического VB. Что, впрочем, не имеет существенного значения.
viewtopic.php?f=1&t=37464&p=6701301
И вы думаете, что вас оставят в живых после прочтения этого поста?

NullPointer
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 09.05.2009 (Сб) 15:03

Re: Получение по ASCII-коду его символ в текущей раскладке.

Сообщение NullPointer » 09.05.2009 (Сб) 20:53

Спасибо, покурил, работает, но местами :twisted: :

Код: Выделить всё
public static string TranslateKey(int lng, int vkCode, bool shift)
        {
            System.Text.StringBuilder sbString  = new System.Text.StringBuilder(10);
            IntPtr lngPtr = new IntPtr(lng);
            byte[]  bKeyState = new byte[255];
            uint KeyValue = MapVirtualKeyEx((uint)vkCode, (uint)2, lngPtr);
            uint lScanCode = MapVirtualKeyEx((uint)vkCode, (uint)0, lngPtr);
            bool bKeyStateStatus    = GetKeyboardState(bKeyState);
            ToUnicodeEx(KeyValue, lScanCode, bKeyState, sbString, sbString.Capacity, 0, lngPtr);

            Console.WriteLine  ("HookCode {0},(Keys)Code {1}, KeyCode {2}, ScanCode {3}, ToUnicodeEx {4}",vkCode,(Keys)vkCode, 
            KeyValue,lScanCode,sbString.ToString());
            return sbString.ToString();
        }


Извините за шарп, но сути не меняет - одни апишки. Параметры: хендл раскладки, код клавиши из хука.

Что в результате? Пропускает спецсимволы, навроде точки, запятой, квадратных и фигурных скобок, тильду, слеши и т.п.

Причем для подобных символов возвращается 0.

Возможно, по логу скажете, в чем дело?

Изображение


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 63

    TopList