Быстрый поиск
Введите фрагмент названия статьи для поиска
Как узнать кодировку текста
19.04.2024 | Категория: Образ мышления: Assembler | Автор: ManHunter
Для корректного отображения или передачи текстов надо знать, в какой кодировке этот текст записан. Есть инструменты для статистического анализа в виде внешних dll или библиотек на различных языках программирования. А я в этой статье расскажу, как можно решить подобную задачу с использованием системного интерфейса IMultiLanguage2. Насколько мне известно, этот интерфейс создавался для использования в браузере Internet Explorer, в том числе с целью определения кодировок web-страниц.Как вы могли догадаться, поскольку планируется работа с COM, то первым делом понадобятся GUID'ы и описания интерфейсов.
Code (Assembler) : Убрать нумерацию
- ; GUID {275C23E2-3747-11D0-9FEA-00AA003F8646}
- CLSID_CMultiLanguage \
- dd 0275C23E2h
- dw 03747h
- dw 011D0h
- db 09Fh, 0EAh, 000h, 0AAh, 000h, 03Fh, 086h, 046h
- ; GUID {DCCFC164-2B38-11D2-B7EC-00C04F8F5D9A}
- IID_IMultiLanguage2 \
- dd 0DCCFC164h
- dw 02B38h
- dw 011D2h
- db 0B7h, 0ECh, 000h, 0C0h, 04Fh, 08Fh, 05Dh, 09Ah
- ; IID_IMultiLanguage2 Interface
- struct IMultiLanguage2
- ; IUnknown
- QueryInterface dd ? ; 000h
- AddRef dd ? ; 004h
- Release dd ? ; 008h
- ; IMultiLanguage2
- GetNumberOfCodePageInfo dd ? ; 00Ch
- GetCodePageInfo dd ? ; 010h
- GetFamilyCodePage dd ? ; 014h
- EnumCodePages dd ? ; 018h
- GetCharsetInfo dd ? ; 01Ch
- IsConvertible dd ? ; 020h
- ConvertString dd ? ; 024h
- ConvertStringToUnicode dd ? ; 028h
- ConvertStringFromUnicode dd ? ; 02Ch
- ConvertStringReset dd ? ; 030h
- GetRfc1766FromLcid dd ? ; 034h
- GetLcidFromRfc1766 dd ? ; 038h
- EnumRfc1766 dd ? ; 03Ch
- GetRfc1766Info dd ? ; 040h
- CreateConvertCharset dd ? ; 044h
- ConvertStringInIStream dd ? ; 048h
- ConvertStringToUnicodeEx dd ? ; 04Ch
- ConvertStringFromUnicodeEx dd ? ; 050h
- DetectCodepageInIStream dd ? ; 054h
- DetectInputCodepage dd ? ; 058h
- ValidateCodePage dd ? ; 05Ch
- GetCodePageDescription dd ? ; 060h
- IsCodePageInstallable dd ? ; 064h
- SetMimeDBSource dd ? ; 068h
- GetNumberOfScripts dd ? ; 06Ch
- EnumScripts dd ? ; 070h
- ValidateCodePageEx dd ? ; 074h
- ends
- struct DetectEncodingInfo
- nLangID dd ?
- nCodePage dd ?
- nDocPercent dd ?
- nConfidence dd ?
- ends
- MLDETECTCP_NONE = 0
Читать статью целиком »
Просмотров: 322 | Комментариев: 0
Мультимедийный плеер на Ассемблере
14.04.2024 | Категория: Образ мышления: Assembler | Автор: ManHunter
Мультимедийный плеер на Ассемблере
Сегодня будем программировать нечто действительно интересное, а именно универсальный мультимедийный плеер. Универсальность реализуется мощью функционала DirectShow, а также установленными в системе аудио- и видеокодеками. И пусть это не полноценное приложение, большинство основных функций плеера в нем будут реализованы.
Читать статью целиком »
Просмотров: 566 | Комментариев: 8
Выполнение скриптов JScript и VBScript из памяти
29.02.2024 | Категория: Образ мышления: Assembler | Автор: ManHunter
Выполнение скриптов JScript и VBScript из памяти
Windows Script Host - стандартный компонент операционной системы Windows - сервер выполнения скриптов на языках VBScript и JScript, а также на других, если их обработчики установлены в системе. Сценарии на WSH способны взаимодействовать с программами, имеющими объектный скриптовый интерфейс путем доступа к их объектам и свойствам. За счет этого сценарии могут выполнять операции с файлами и каталогами, системным реестром, базами данных, производить сложные расчеты, манипуляции со строками и т.п. Было бы большим упущением не задействовать подобную мощь в своих программах.
Читать статью целиком »
Просмотров: 578 | Комментариев: 4
Упаковка и распаковка данных с помощью функций D3D
05.02.2024 | Категория: Образ мышления: Assembler | Автор: ManHunter
Упаковка и распаковка данных с помощью функций D3D
Функции Microsoft High Level Shader Language (HLSL) изначально предназначены для работы с шейдерами в различных графических приложениях. Но, как выяснилось, с помощью некоторых из этих функций можно весьма эффективно сжимать данные, а потом распаковывать их.
Читать статью целиком »
Просмотров: 592 | Комментариев: 5
Как получить список подсказок у иконок в трее
23.01.2024 | Категория: Образ мышления: Assembler | Автор: ManHunter
Сегодня снова будем издеваться над треем. На этот раз для доступа к данным в трее будем использовать средства интерфейса IAccessible, ранее мы его уже применяли, но немного для других задач.Структуры, константы, интерфейсы и все остальное уже расписано в статье по ссылке выше, дублировать не буду. Как пройтись по иерархии окон Проводника и получить хэндл трея с иконками тут тоже было немало примеров. Переходим к основной части.
Code (Assembler) : Убрать нумерацию
- ; Получить информацию о выбранном элементе
- ; [hTray] - хэндл окна трея с иконками
- invoke AccessibleObjectFromWindow,[hTray],OBJID_CLIENT,\
- CLSID_IAccessible,pAcc
- ; Количество элементов в окне
- mov eax,[pAcc]
- mov eax,[eax]
- stdcall dword [eax+IAccessible.get_accChildCount],[pAcc],tmp
- invoke wsprintf,buff,mask1,[tmp]
- add esp,12
- stdcall AddLog,[hwmain],ID_LOG,buff
- ; Начинаем перебирать с 1 элемента
- mov ebx,1
- loc_loop:
- ; Выделить память под строку
- invoke SysAllocString,szNull
- mov [bstrName],eax
- ; Получить название выбранного элемента
- push [bstrName]
- mov [varChild.vt],VT_I4
- mov [varChild.lVal],ebx
- mov eax,varChild
- push dword [eax+0Ch]
- push dword [eax+08h]
- push dword [eax+04h]
- push dword [eax]
- mov eax,[pAcc]
- mov eax,[eax]
- stdcall dword [eax+IAccessible.get_accName],[pAcc]
- ; Строка подсказки
- mov eax,[bstrName]
- mov eax,[eax]
- ; EAX -> строка подсказки
- ; Прибраться за собой
- invoke SysFreeString,[bstrName]
- ; Следующий элемент
- inc ebx
- cmp ebx,[tmp]
- jbe loc_loop
- ; Прибраться за собой
- mov eax,[pAcc]
- mov eax,[eax]
- stdcall dword [eax+IAccessible.Release],[pAcc]
Читать статью целиком »
Просмотров: 361 | Комментариев: 4