Быстрый поиск
Введите фрагмент названия статьи для поиска
Упаковка и распаковка данных с помощью библиотеки zlib
10.12.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
Упаковка и распаковка данных с помощью библиотеки zlib
Продолжаем тему упаковки и распаковки. Сегодня в качестве инструмента будет известная библиотека zlib от Jean-loup Gailly и Mark Adler, признанных профессионалов в области компрессии данных. Ну а что, по системным функциям прошлись, почему бы не пройтись по сторонним библиотекам. Тем более, что zlib используется во многих программных продуктах, и, если вдруг возникнет необходимость поковыряться в их базах, то будет уже практически готовое решение.
Читать статью целиком »
Просмотров: 2077 | Комментариев: 4
Работа с метаданными изображений с помощью GDI+
28.11.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
Работа с метаданными изображений с помощью GDI+
Библиотека Windows GDI+ предназначена для работы с графикой и мультимедиа и включает в себя более 600 различных функций для этого. Особо радует поддержка: все ключевые функции доступны уже начиная с Windows XP. Ранее мы уже немного касались этой темы. Сегодня разберем примеры, как средствами GDI+ можно получить метаданные из изображений различных форматов и изменить их.
Читать статью целиком »
Просмотров: 1091 | Комментариев: 10
Работа с метаданными MP3-файлов на Ассемблере
23.11.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
Работа с метаданными MP3-файлов на Ассемблере
Во многих файлах, в частности музыкальных и видео, присутствуют особые блоки данных, так называемые метаданные или теги. Метаданные содержат информацию о названии композиции и альбома, имени исполнителя, жанре, номере трека и т.п. Их используют программные и аппаратные проигрыватели, каталогизаторы и другие средства для работы с мультимедийными файлами. Давайте посмотрим, как можно получить теги из MP3-файла или изменить их средствами самой системы без ручного парсинга внутренней структуры файла.
Читать статью целиком »
Просмотров: 1122 | Комментариев: 5
Управление громкостью звука в системе
15.11.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
Управление громкостью звука в системе
Сегодня разберем пример, как программно изменить громкость звука в Windows. В старых версиях Windows для этого использовались waveform-функции с очень неудобными параметрами. Управлять громкостью с помощью эмуляции мультимедийных клавиш тоже не самое лучшее решение. Но, к счастью, прогресс не стоит на месте.
Читать статью целиком »
Просмотров: 1573 | Комментариев: 9
Обработка колесика мыши над иконкой в трее
12.11.2021 | Категория: Образ мышления: Assembler | Автор: ManHunter
"По следам наших публикаций", как любили писать в советской прессе. В предыдущей статье я обещал рассказать, каким образом можно реализовать обработку вращения колесика мыши над иконкой в системном трее. Поскольку система не отправляет иконкам в трее сообщение WM_MOUSEWHEEL, обрабатывать его мы будем при помощи хуков и описанных в предыдущей статье методов определения, что курсор находится над нужной иконкой. Начнем с локального хука. Установка и снятие хука выполняется самым обычным способом, например:Code (Assembler) : Убрать нумерацию
- proc DialogProc hwnddlg,msg,wparam,lparam
- push ebx esi edi
- cmp [msg],WM_INITDIALOG
- je .wminitdialog
- cmp [msg],WM_CLOSE
- je .wmclose
- ...
- ...
- xor eax,eax
- jmp .finish
- .wminitdialog:
- ...
- ...
- ; Показать иконку в трее
- invoke Shell_NotifyIcon, NIM_ADD,node
- ; Установить обработчик мыши
- invoke GetCurrentThreadId
- invoke SetWindowsHookEx,WH_MOUSE,MousewheelProc,NULL,eax
- mov [hhkm],eax
- mov eax,[hwnddlg]
- mov [hwmain],eax
- jmp .processed
- ...
- ...
- .wmclose:
- ; Снять обработчик мыши
- invoke UnhookWindowsHookEx,[hhkm]
- ; Удалить иконку из трея
- invoke Shell_NotifyIcon,NIM_DELETE,node
- ; Закрыть окно
- invoke EndDialog,[hwnddlg],0
- .processed:
- mov eax,1
- .finish:
- pop edi esi ebx
- ret
- endp
Code (Assembler) : Убрать нумерацию
- ; Структура для обработчика хука
- struct MOUSEHOOKSTRUCTEX
- pt POINT
- hwnd dd ?
- wHitTestCode dd ?
- dwExtraInfo dd ?
- mouseData dd ?
- ends
- ;-------------------------------------------------------------
- ; Обработка mousewheel
- ;-------------------------------------------------------------
- proc MousewheelProc nCode:dword,wParam:dword,lParam:dword
- pusha
- cmp [nCode],0
- jl .loc_ret
- ; Это сообщение от колеса мыши?
- cmp [wParam],WM_MOUSEWHEEL
- jne .loc_ret
- ; Заполнить структуру для идентификации иконки
- mov [notify.cbSize],sizeof.NOTIFYICONIDENTIFIER
- mov eax,[hwmain]
- mov [notify.hWnd],eax
- mov [notify.uID],ICON_ID
- ; Получить координаты иконки в трее
- invoke Shell_NotifyIconGetRect,notify,rc
- ; Указатель на MOUSEHOOKSTRUCT
- mov ebx,[lParam]
- ; Курсор находится внутри прямоугольника иконки?
- invoke PtInRect,rc,[ebx+MOUSEHOOKSTRUCTEX.pt.x],\
- [ebx+MOUSEHOOKSTRUCTEX.pt.y]
- or eax,eax
- ; Нет, ничего не делать
- jz .loc_ret
- ; Проверить направление поворота колесика
- mov eax,[ebx+MOUSEHOOKSTRUCTEX.mouseData]
- or eax,eax
- js .loc_down
- .loc_up:
- ; Вращение вверх
- ...
- ...
- jmp .loc_ret
- .loc_down:
- ; Вращение вниз
- ...
- ...
- .loc_ret:
- popa
- invoke CallNextHookEx,[hhkm],[nCode],[wParam],[lParam]
- ret
- endp
Читать статью целиком »
Просмотров: 879 | Комментариев: 8