
Быстрый поиск
Введите фрагмент названия статьи для поиска
Мультимедийный плеер на Ассемблере
14.04.2024 | Категория: Образ мышления: Assembler | Автор: ManHunter

Мультимедийный плеер на Ассемблере
Сегодня будем программировать нечто действительно интересное, а именно универсальный мультимедийный плеер. Универсальность реализуется мощью функционала DirectShow, а также установленными в системе аудио- и видеокодеками. И пусть это не полноценное приложение, большинство основных функций плеера в нем будут реализованы.
Читать статью целиком »
Просмотров: 1190 | Комментариев: 8
Выполнение скриптов JScript и VBScript из памяти
29.02.2024 | Категория: Образ мышления: Assembler | Автор: ManHunter

Выполнение скриптов JScript и VBScript из памяти
Windows Script Host - стандартный компонент операционной системы Windows - сервер выполнения скриптов на языках VBScript и JScript, а также на других, если их обработчики установлены в системе. Сценарии на WSH способны взаимодействовать с программами, имеющими объектный скриптовый интерфейс путем доступа к их объектам и свойствам. За счет этого сценарии могут выполнять операции с файлами и каталогами, системным реестром, базами данных, производить сложные расчеты, манипуляции со строками и т.п. Было бы большим упущением не задействовать подобную мощь в своих программах.
Читать статью целиком »
Просмотров: 1136 | Комментариев: 4
Упаковка и распаковка данных с помощью функций D3D
05.02.2024 | Категория: Образ мышления: Assembler | Автор: ManHunter

Упаковка и распаковка данных с помощью функций D3D
Функции Microsoft High Level Shader Language (HLSL) изначально предназначены для работы с шейдерами в различных графических приложениях. Но, как выяснилось, с помощью некоторых из этих функций можно весьма эффективно сжимать данные, а потом распаковывать их.
Читать статью целиком »
Просмотров: 1075 | Комментариев: 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]
Читать статью целиком »
Просмотров: 794 | Комментариев: 7
Отслеживание изменения метки тома
27.09.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter
Несколько лет назад я демонстрировал, как можно легко и просто отслеживать изменения в каком-нибудь каталоге. Кроме отслеживания подобных глобальных движений, система позволяет отслеживать изменения более точечно, например, на отдельных объектах файловой системы. Для этого есть функция SHChangeNotifyRegister. В качестве примера я разберу, как можно отслеживать изменение метки тома. На самом деле функция SHChangeNotifyRegister обладает гораздо более широкими возможностями по отслеживанию различных системных уведомлений.Сперва небольшое количество данных для работы, которые отсутствуют в инклудах FASM.
Code (Assembler) : Убрать нумерацию
- struct SHChangeNotifyEntry
- pidl dd ?
- fRecursive dd ?
- ends
- SHCNRF_ShellLevel = 0x0002
- SFGAO_FILESYSTEM = 0x40000000
- SHCNE_RENAMEFOLDER = 0x00020000
Code (Assembler) : Убрать нумерацию
- ; Настроить отслеживаемый объект
- invoke SHParseDisplayName,szWatch,NULL,\
- pidl,SFGAO_FILESYSTEM,NULL
- ; Заполнить массив отслеживаемых объектов
- mov eax,[pidl]
- mov [shentry.pidl],eax
- mov [shentry.fRecursive],FALSE
- ; Зарегистрировать обработчик уведомлений
- invoke SHChangeNotifyRegister,\
- [hwnddlg],\
- SHCNRF_ShellLevel,\
- SHCNE_RENAMEFOLDER,\
- WM_LABEL_CHANGED,\
- 1,\
- shentry
- mov [cookie],eax
- ; Освободить неиспользуемую память
- invoke CoTaskMemFree,[pidl]
Код WM_LABEL_CHANGED - это пользовательское сообщение окну приложения, его можно описать, например, как WM_LABEL_CHANGED = WM_USER + 200. При поступлении уведомления от системы именно это сообщение будет отправлено целевому окну обработчика. В параметре lParam находится код события, что очень полезно, когда приложение подписано сразу на несколько событий.
Читать статью целиком »
Просмотров: 767 | Комментариев: 0


