Некорректная обработка символов API функциями в XP

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
MOV
Постоялец
Постоялец
 
Сообщения: 414
Зарегистрирован: 13.03.2004 (Сб) 15:13
Откуда: Санкт-Петербург

Некорректная обработка символов API функциями в XP

Сообщение MOV » 13.03.2004 (Сб) 15:22

[b]Суть вопроса: например, функция GetKeyNameText
Объявление: Private Declare Function GetKeyNameText Lib "user32" _
Alias "GetKeyNameTextA" (ByVal lParam As Long, ByVal lpBuffer As String, ByVal nSize As Long) As Long
Как известно, предназаначена для получения имени клавиши по скан-коду (lParam) нажатой. Имя, соответсвенно, возвращается в (lpBuffer).
Так вот в Win9x все работает нормально, а в XP с русскими проблема: в русском регистре возвращаются все те же латинские буквы (как понимаю, и в NT , будет то же самое).
Пробовал вызов псевдонимом "GetKeyNameTextW" - то же самое.
Аналогичные функции, которые, например, делают преобразования между кодом виртуальной клавиши и символом, на русском тоже ничего не возвращают (все в том же XP).
Долго мучился с кодировками ANSI и Unicode, но так ничего и не придумал, так как по сути, видимо, VB работает с Unicode, а API возвращает, как понимаю, ASCII-коды и в итоге этих преобразований идет косяк. Или в XP друге кодовые страницы? :-\ (бред какой-то).
В общем, можно ли решить данную проблему без создания собственной таблицы соответствия, а если нет, то как сделать, чтобы она (таблица)создавалась программно на основе текущей кодовой страницы, раскладки и т.п.
В общем запара какая-то. Кто знает, помогите.

Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: SemrushBot и гости: 4

    TopList