Blog. Just Blog

Быстрый поиск

Введите фрагмент названия статьи для поиска

Обработка событий 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.
  1. ; GUID {0968E258-16C7-4DBA-AA86-462DD61E31A3}
  2. CLSID_PersistentZoneIdentifier \
  3.     dd 00968E258h
  4.     dw 016C7h
  5.     dw 04DBAh
  6.     db 0AAh, 086h, 046h, 02Dh, 0D6h, 01Eh, 031h, 0A3h
  7.  
  8. ; GUID {CD45F185-1B21-48E2-967B-EAD743A8914E}
  9. IID_IZoneIdentifier \
  10.     dd 0CD45F185h
  11.     dw 01B21h
  12.     dw 048E2h
  13.     db 096h, 07Bh, 0EAh, 0D7h, 043h, 0A8h, 091h, 04Eh
  14.  
  15. ; GUID {0000010B-0000-0000-C000-000000000046}
  16. IID_IPersistFile \
  17.     dd 00000010Bh
  18.     dw 00000h
  19.     dw 00000h
  20.     db 0C0h, 000h, 000h, 000h, 000h, 000h, 000h, 046h
  21.  
  22. ; IID_IZoneIdentifier Interface
  23. struct IZoneIdentifier
  24.     ; IUnknown
  25.     QueryInterface dd ?   ; 000h
  26.     AddRef         dd ?   ; 004h
  27.     Release        dd ?   ; 008h
  28.     ; IZoneIdentifier
  29.     GetId          dd ?   ; 00Ch
  30.     SetId          dd ?   ; 010h
  31.     Remove         dd ?   ; 014h
  32. ends
  33.  
  34. ; IID_IPersistFile Interface
  35. struct IPersistFile
  36.     ; IUnknown
  37.     QueryInterface dd ?   ; 000h
  38.     AddRef         dd ?   ; 004h
  39.     Release        dd ?   ; 008h
  40.     ; IPersistFile
  41.     GetClassID     dd ?   ; 00Ch
  42.     IsDirty        dd ?   ; 010h
  43.     Load           dd ?   ; 014h
  44.     Save           dd ?   ; 018h
  45.     SaveCompleted  dd ?   ; 01Ch
  46.     GetCurFile     dd ?   ; 020h
  47. ends
  48.  
  49. CLSCTX_INPROC_SERVER = 1
  50. S_OK                 = 0
  51. STGM_READ            = 0
Интерфейс IZoneIdentifier предоставляет три метода для работы с Zone.Identifier: получение текущего значения, установка или изменение идентификатора и его полное удаление.

Читать статью целиком »
Просмотров: 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'ов и констант.
  1. ; GUID {F8383852-FCD3-11D1-A6B9-006097DF5BD4}
  2. CLSID_ProgressDialog \
  3.     dd 0F8383852h
  4.     dw 0FCD3h
  5.     dw 011D1h
  6.     db 0A6h, 0B9h, 000h, 060h, 097h, 0DFh, 05Bh, 0D4h
  7.  
  8. ; GUID {EBBC7C04-315E-11D2-B62F-006097DF5BD4}
  9. IID_IProgressDialog \
  10.     dd 0EBBC7C04h
  11.     dw 0315Eh
  12.     dw 011D2h
  13.     db 0B6h, 02Fh, 000h, 060h, 097h, 0DFh, 05Bh, 0D4h
  14.  
  15. ; IID_IProgressDialog Interface
  16. struct IProgressDialog
  17.     ; IUnknown
  18.     QueryInterface      dd ?
  19.     AddRef              dd ?
  20.     Release             dd ?
  21.     ; IProgressDialog
  22.     StartProgressDialog dd ?
  23.     StopProgressDialog  dd ?
  24.     SetTitle            dd ?
  25.     SetAnimation        dd ?
  26.     HasUserCancelled    dd ?
  27.     SetProgress         dd ?
  28.     SetProgress64       dd ?
  29.     SetLine             dd ?
  30.     SetCancelMsg        dd ?
  31.     Timer               dd ?
  32. ends
  33.  
  34. PDTIMER_RESET  = 0x00000001
  35. PDTIMER_PAUSE  = 0x00000002
  36. PDTIMER_RESUME = 0x00000003
  37.  
  38. PROGDLG_NORMAL          = 0x00000000
  39. PROGDLG_MODAL           = 0x00000001
  40. PROGDLG_AUTOTIME        = 0x00000002
  41. PROGDLG_NOTIME          = 0x00000004
  42. PROGDLG_NOMINIMIZE      = 0x00000008
  43. PROGDLG_NOPROGRESSBAR   = 0x00000010
  44. PROGDLG_MARQUEEPROGRESS = 0x00000020
  45. PROGDLG_NOCANCEL        = 0x00000040
Окно прогресса создается, настраивается и управляется при помощи методов интерфейса IProgressDialog.

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

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