Blog. Just Blog

Как получить список поддерживаемых кодировок

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Образ мышления: Assembler | Автор: ManHunter
Сегодняшний небольшой пример кода - получение списка всех поддерживаемых кодировок в системе. Примерно такой список можно увидеть в меню сохранения в текстовых редакторах или в браузерах, когда надо выбрать кодировку страницы. Если ваше приложение умеет работать с разными кодировками, то значит должно уметь и получать их список.

Начинаем с констант и структуры, которые отсутствуют в FASM.
  1. CP_SUPPORTED = 0x00000002
  2.  
  3. MAX_LEADBYTES   = 12
  4. MAX_DEFAULTCHAR = 2
  5.  
  6. struct CPINFOEX
  7.         MaxCharSize        dd ?
  8.         DefaultChar        rb MAX_DEFAULTCHAR
  9.         LeadByte           rb MAX_LEADBYTES
  10.         UnicodeDefaultChar dw ?
  11.         CodePage           dd ?
  12.         CodePageName       rb MAX_PATH
  13. ends
Для получения списка всех доступных кодировок надо вызвать функцию EnumSystemCodePages с параметром CP_SUPPORTED или с параметром CP_INSTALLED, если надо узнать только список установленных.
  1.         ; Получить список поддерживаемых кодировок
  2.         invoke  EnumSystemCodePages,CodePageEnumProc,CP_SUPPORTED
Другим параметром передается адрес функции обработчика, которой будут поочередно передаваться идентификаторы кодировок.

Что интересно, идентификатор представляет собой число, но передается в обработчик в виде строки. Поэтому дополнительно приходится преобразовывать строку в число. После этого можно вызвать функцию GetCPInfoEx с числовым идентификатором кодировки, которая при успешном выполнении вернет заполненную структуру CPINFOEX.
  1. proc CodePageEnumProc lpCP:DWORD
  2.         pusha
  3.  
  4.         ; Строку в число
  5.         stdcall str2dec,[lpCP]
  6.  
  7.         ; Получить информацию о кодировке
  8.         invoke  GetCPInfoEx,eax,0,cpinfo
  9.  
  10.         ; cpinfo - заполненная структура CPINFOEX
  11.         ; cpinfo.CodePageName - наименование кодировки
  12.  
  13.         popa
  14.  
  15.         mov     eax,TRUE
  16.  
  17.         ret
  18. endp
Все необходимые параметры кодировки находятся в полях структуры CPINFOEX: текстовое название, количество байт на символ, числовой идентификатор и другие данные.

В приложении пример программы с исходным текстом, которая выводит список поддерживаемых кодировок в системе.

Пример программы с исходным текстом (FASM)Пример программы с исходным текстом (FASM)

CodePage.Enumeration.Demo.zip (3,014 bytes)


Поделиться ссылкой ВКонтакте
Просмотров: 447 | Комментариев: 0

Метки: Assembler

Комментарии

Отзывы посетителей сайта о статье
Комментариeв нет

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.08 сек. / MySQL: 2 (0.0031 сек.) / Память: 4.5 Mb
Наверх