Быстрый поиск
Введите фрагмент названия статьи для поиска
Обработка событий IWebBrowser на Ассемблере
29.05.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter
Обработка событий IWebBrowser на Ассемблере
В предыдущей статье про работу со встроенным браузером я написал, что статус полной загрузки страницы можно отслеживать при помощи таймера и вызова метода get_ReadyState интерфейса IWebBrowser2. Способ имеет место быть, но также имеет немало недостатков. Правильное решение этой задачи - получения сигналов от объекта браузера и обработка событий IWebBrowser. Пришлось провести пару бессонных ночей в отладчике, но результат меня порадовал.
Читать статью целиком »
Просмотров: 529 | Комментариев: 0
Работа с Zone.Identifier на Ассемблере
12.05.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter
Несколько лет назад я выкладывал пару статей на тему блокировки файлов с помощью альтернативных файловых потоков и Zone.Identifier. Там вся работа с ними выполнялась или средствами самой системы Windows, или сторонними приложениями. Настало время написать собственное приложение.Сперва немного теории. За блокировку файлов отвечает COM-объект IZoneIdentifier для работы с которым нам потребуется несколько структур, GUID'ов и констант, про которые не знает FASM.
Code (Assembler) : Убрать нумерацию
- ; GUID {0968E258-16C7-4DBA-AA86-462DD61E31A3}
- CLSID_PersistentZoneIdentifier \
- dd 00968E258h
- dw 016C7h
- dw 04DBAh
- db 0AAh, 086h, 046h, 02Dh, 0D6h, 01Eh, 031h, 0A3h
- ; GUID {CD45F185-1B21-48E2-967B-EAD743A8914E}
- IID_IZoneIdentifier \
- dd 0CD45F185h
- dw 01B21h
- dw 048E2h
- db 096h, 07Bh, 0EAh, 0D7h, 043h, 0A8h, 091h, 04Eh
- ; GUID {0000010B-0000-0000-C000-000000000046}
- IID_IPersistFile \
- dd 00000010Bh
- dw 00000h
- dw 00000h
- db 0C0h, 000h, 000h, 000h, 000h, 000h, 000h, 046h
- ; IID_IZoneIdentifier Interface
- struct IZoneIdentifier
- ; IUnknown
- QueryInterface dd ? ; 000h
- AddRef dd ? ; 004h
- Release dd ? ; 008h
- ; IZoneIdentifier
- GetId dd ? ; 00Ch
- SetId dd ? ; 010h
- Remove dd ? ; 014h
- ends
- ; IID_IPersistFile Interface
- struct IPersistFile
- ; IUnknown
- QueryInterface dd ? ; 000h
- AddRef dd ? ; 004h
- Release dd ? ; 008h
- ; IPersistFile
- GetClassID dd ? ; 00Ch
- IsDirty dd ? ; 010h
- Load dd ? ; 014h
- Save dd ? ; 018h
- SaveCompleted dd ? ; 01Ch
- GetCurFile dd ? ; 020h
- ends
- CLSCTX_INPROC_SERVER = 1
- S_OK = 0
- STGM_READ = 0
Читать статью целиком »
Просмотров: 573 | Комментариев: 5
Как программно получить и установить рейтинг файла
04.05.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter
Как программно получить и установить рейтинг файла
Начиная с Windows Vista у пользователя появилась возможность ставить оценки некоторым файлам, например, фотографиям, музыкальным файлам и видеороликам. Оценка отображается при просмотре таблицы файлов в Проводнике в виде звездного рейтинга от 0 до 5. На мой взгляд, штука не особо нужная, но раз она присутствует в системе, то почему бы не научиться с ней работать? Как обычно, Ассемблер нам в этом поможет.
Читать статью целиком »
Просмотров: 462 | Комментариев: 0
Универсальное извлечение метаданных из файлов
09.02.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter
Универсальное извлечение метаданных из файлов
За последнее время на сайте появилось немало статей, посвященных работе с метаданными файлов различных форматов. Но там рассматривались только определенные форматы и использовались методы, заточенные под определенную структуру файлов. Но в Windows есть очень мощные инструменты, которые позволяют получить множество полезной информации практически из любого файла, независимо от его структуры и типа.
Читать статью целиком »
Просмотров: 736 | Комментариев: 0
Использование системного окна прогресса на Ассемблере
23.01.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter
Системное окно прогресса - удобный инструмент в тех случаях, когда нет возможности возиться с кастомизацией или созданием нестандартных элементов, или хочется сделать все максимально приближенным к системному интерфейсу, независимо от платформы, где будет запускаться ваше приложение. И очень странно, что нет никакой информации о реализации этого диалогового окна на Ассемблере, хотя все делается достаточно просто. Начинаем с описания интерфейса, GUID'ов и констант.Code (Assembler) : Убрать нумерацию
- ; GUID {F8383852-FCD3-11D1-A6B9-006097DF5BD4}
- CLSID_ProgressDialog \
- dd 0F8383852h
- dw 0FCD3h
- dw 011D1h
- db 0A6h, 0B9h, 000h, 060h, 097h, 0DFh, 05Bh, 0D4h
- ; GUID {EBBC7C04-315E-11D2-B62F-006097DF5BD4}
- IID_IProgressDialog \
- dd 0EBBC7C04h
- dw 0315Eh
- dw 011D2h
- db 0B6h, 02Fh, 000h, 060h, 097h, 0DFh, 05Bh, 0D4h
- ; IID_IProgressDialog Interface
- struct IProgressDialog
- ; IUnknown
- QueryInterface dd ?
- AddRef dd ?
- Release dd ?
- ; IProgressDialog
- StartProgressDialog dd ?
- StopProgressDialog dd ?
- SetTitle dd ?
- SetAnimation dd ?
- HasUserCancelled dd ?
- SetProgress dd ?
- SetProgress64 dd ?
- SetLine dd ?
- SetCancelMsg dd ?
- Timer dd ?
- ends
- PDTIMER_RESET = 0x00000001
- PDTIMER_PAUSE = 0x00000002
- PDTIMER_RESUME = 0x00000003
- PROGDLG_NORMAL = 0x00000000
- PROGDLG_MODAL = 0x00000001
- PROGDLG_AUTOTIME = 0x00000002
- PROGDLG_NOTIME = 0x00000004
- PROGDLG_NOMINIMIZE = 0x00000008
- PROGDLG_NOPROGRESSBAR = 0x00000010
- PROGDLG_MARQUEEPROGRESS = 0x00000020
- PROGDLG_NOCANCEL = 0x00000040
Читать статью целиком »
Просмотров: 672 | Комментариев: 2