Blog. Just Blog

Образ мышления: Assembler

То, что не удается запрограммировать на Ассемблере, приходится паять
Образ мышления: Assembler - RSS-канал Образ мышления: Assembler - Карта сайта

Как узнать кодировку текста

19.04.2024 | Категория: Образ мышления: Assembler | Автор: ManHunter
Для корректного отображения или передачи текстов надо знать, в какой кодировке этот текст записан. Есть инструменты для статистического анализа в виде внешних dll или библиотек на различных языках программирования. А я в этой статье расскажу, как можно решить подобную задачу с использованием системного интерфейса IMultiLanguage2. Насколько мне известно, этот интерфейс создавался для использования в браузере Internet Explorer, в том числе с целью определения кодировок web-страниц.

Как вы могли догадаться, поскольку планируется работа с COM, то первым делом понадобятся GUID'ы и описания интерфейсов.
  1. ; GUID {275C23E2-3747-11D0-9FEA-00AA003F8646}
  2. CLSID_CMultiLanguage \
  3.     dd 0275C23E2h
  4.     dw 03747h
  5.     dw 011D0h
  6.     db 09Fh, 0EAh, 000h, 0AAh, 000h, 03Fh, 086h, 046h
  7.  
  8. ; GUID {DCCFC164-2B38-11D2-B7EC-00C04F8F5D9A}
  9. IID_IMultiLanguage2 \
  10.     dd 0DCCFC164h
  11.     dw 02B38h
  12.     dw 011D2h
  13.     db 0B7h, 0ECh, 000h, 0C0h, 04Fh, 08Fh, 05Dh, 09Ah
  14.  
  15. ; IID_IMultiLanguage2 Interface
  16. struct IMultiLanguage2
  17.     ; IUnknown
  18.     QueryInterface             dd ?   ; 000h
  19.     AddRef                     dd ?   ; 004h
  20.     Release                    dd ?   ; 008h
  21.     ; IMultiLanguage2
  22.     GetNumberOfCodePageInfo    dd ?   ; 00Ch
  23.     GetCodePageInfo            dd ?   ; 010h
  24.     GetFamilyCodePage          dd ?   ; 014h
  25.     EnumCodePages              dd ?   ; 018h
  26.     GetCharsetInfo             dd ?   ; 01Ch
  27.     IsConvertible              dd ?   ; 020h
  28.     ConvertString              dd ?   ; 024h
  29.     ConvertStringToUnicode     dd ?   ; 028h
  30.     ConvertStringFromUnicode   dd ?   ; 02Ch
  31.     ConvertStringReset         dd ?   ; 030h
  32.     GetRfc1766FromLcid         dd ?   ; 034h
  33.     GetLcidFromRfc1766         dd ?   ; 038h
  34.     EnumRfc1766                dd ?   ; 03Ch
  35.     GetRfc1766Info             dd ?   ; 040h
  36.     CreateConvertCharset       dd ?   ; 044h
  37.     ConvertStringInIStream     dd ?   ; 048h
  38.     ConvertStringToUnicodeEx   dd ?   ; 04Ch
  39.     ConvertStringFromUnicodeEx dd ?   ; 050h
  40.     DetectCodepageInIStream    dd ?   ; 054h
  41.     DetectInputCodepage        dd ?   ; 058h
  42.     ValidateCodePage           dd ?   ; 05Ch
  43.     GetCodePageDescription     dd ?   ; 060h
  44.     IsCodePageInstallable      dd ?   ; 064h
  45.     SetMimeDBSource            dd ?   ; 068h
  46.     GetNumberOfScripts         dd ?   ; 06Ch
  47.     EnumScripts                dd ?   ; 070h
  48.     ValidateCodePageEx         dd ?   ; 074h
  49. ends
  50.  
  51. struct DetectEncodingInfo
  52.         nLangID     dd ?
  53.         nCodePage   dd ?
  54.         nDocPercent dd ?
  55.         nConfidence dd ?
  56. ends
  57.  
  58. MLDETECTCP_NONE = 0
Для определения кодировки текста в интерфейсе IMultiLanguage2 предусмотрены два метода: DetectCodepageInIStream и DetectInputCodepage. Первый предназначен для работы с объектами Stream, а второй метод работает со строками в памяти. Вот им и воспользуемся.

Читать статью целиком »
Просмотров: 470 | Комментариев: 0

Мультимедийный плеер на Ассемблере

14.04.2024 | Категория: Образ мышления: Assembler | Автор: ManHunter

Мультимедийный плеер на Ассемблере

Сегодня будем программировать нечто действительно интересное, а именно универсальный мультимедийный плеер. Универсальность реализуется мощью функционала DirectShow, а также установленными в системе аудио- и видеокодеками. И пусть это не полноценное приложение, большинство основных функций плеера в нем будут реализованы.

Читать статью целиком »
Просмотров: 650 | Комментариев: 8

Как узнать окно-владельца буфера обмена

08.04.2024 | Категория: Образ мышления: Assembler | Автор: ManHunter

Как узнать окно-владельца буфера обмена

Если какое-то приложение открыло буфер обмена при помощи функции OpenClipboard, то до момента вызова функции CloseClipboard буфер обмена будет недоступен для других приложений. Обычно такого не происходит, работа с буфером сводится к последовательному открытию, получению или записи данных и закрытию, но от случайных сбоев никто не застрахован. Если ваше приложение также активно работает с буфером обмена, то будет полезным уметь обрабатывать такие ситуации и уведомлять пользователя, что в какой-то сторонней программе что-то пошло не так.

Читать статью целиком »
Просмотров: 351 | Комментариев: 0

Конвертирование изображений с помощью библиотеки FreeImage

18.03.2024 | Категория: Образ мышления: Assembler | Автор: ManHunter

Конвертирование изображений с помощью библиотеки FreeImage

FreeImage - бесплатная библиотека с открытым исходным кодом, предназначенная для работы с изображениями. С ее помощью можно менять размеры изображений, накладывать на них различные эффекты, поворачивать, обрезать, а главное, библиотека FreeImage умеет загружать изображения разных форматов и затем конвертировать их в другие. При этом не требуется установка каких-нибудь кодеков. За удобство пользования приходится платить тем, что размер вашего приложения увеличивается как минимум на 2 мегабайта, и то если упаковать dll. Для Ассемблера это много, для современных приложений, наверное, нормально.

Читать статью целиком »
Просмотров: 614 | Комментариев: 9

Выполнение скриптов JScript и VBScript из памяти

29.02.2024 | Категория: Образ мышления: Assembler | Автор: ManHunter

Выполнение скриптов JScript и VBScript из памяти

Windows Script Host - стандартный компонент операционной системы Windows - сервер выполнения скриптов на языках VBScript и JScript, а также на других, если их обработчики установлены в системе. Сценарии на WSH способны взаимодействовать с программами, имеющими объектный скриптовый интерфейс путем доступа к их объектам и свойствам. За счет этого сценарии могут выполнять операции с файлами и каталогами, системным реестром, базами данных, производить сложные расчеты, манипуляции со строками и т.п. Было бы большим упущением не задействовать подобную мощь в своих программах.

Читать статью целиком »
Просмотров: 661 | Комментариев: 4

Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.06 сек. / MySQL: 2 (0.0037 сек.) / Память: 4.5 Mb
Наверх