Blog. Just Blog

Образ мышления: Assembler

То, что не удается запрограммировать на Ассемблере, приходится паять
Образ мышления: Assembler - RSS-канал Образ мышления: Assembler - Карта сайта

Добавление элементов и задач в Jump List приложения

22.01.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter

Добавление элементов и задач в Jump List приложения

Функция "Jump List" - список быстрого перехода - впервые появилась в Windows 7. Она создана для облегчения поиска нужных опций и ускорения выполнения наиболее частых операций для выбранного приложения. Списки быстрого перехода появляются при нажатии правой кнопкой мыши на значке приложения в панели задач. Большинство функций для работы с панелью задач я уже давным-давно разобрал, а про Jump List совсем забыл. Срочно исправляю ситуацию.

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

Получение и изменение обоев рабочего стола на Ассемблере

14.01.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter
Тема обоев рабочего стола Windows уже поднималась тут несколько раз, но это были, в основном, какие-то готовые программные решения. Настало время заглянуть "под капот" системы и посмотреть, как оно устроено. А лучшего инструмента, чем Ассемблер, для этих целей сложно придумать.

Начнем с получения информации об установленных обоях рабочего стола. Тут ничего сложного, достаточно вызвать функцию SystemParametersInfo с параметром SPI_GETDESKWALLPAPER.
  1.         SPI_GETDESKWALLPAPER = 0x0073
  2.  
  3.         invoke  SystemParametersInfo,SPI_GETDESKWALLPAPER,\
  4.                 MAX_PATH,szPath,0
  5.         ; szPath -> строка пути к файлу обоев
После выполнения этого кода в переменную szPath будет записана строка с расположением файла обоев на диске. Больше никакой информации типа положения изображения получить нельзя. В результате экспериментов выяснилось, что при смене обоев через системное меню "Персонализация", выбранный файл с изображением копируется в папку с пользовательскими темами, а при программной установке остается на месте. Особой практической пользы в этом знании нет, просто интересный факт.

Теперь переходим к смене обоев рабочего стола. В интернетах для этих целей обычно рекомендуют использовать упомянутую выше функцию SystemParametersInfo с параметром SPI_SETDESKWALLPAPER. Код получается минимальный, все очень просто реализуется, выглядит на первый взгляд стильно, модно, молодежно.
  1. ; Путь к файлу с новыми обоями рабочего стола
  2. szPath  db 'c:\windows\wallpaper.bmp',0
  3.  
  4.         SPI_SETDESKWALLPAPER  = 20
  5.         SPIF_SENDWININICHANGE = 2
  6.         SPIF_UPDATEINIFILE    = 1
  7.  
  8.         invoke  SystemParametersInfo,SPI_SETDESKWALLPAPER,\
  9.                 0,szPath,SPIF_UPDATEINIFILE+SPIF_SENDWININICHANGE
Минусы этого способа перекрывают все плюсы. Нет возможности настраивать режим отображения обоев. Новые обои отображаются в том же положении, в котором были установлены текущие, если старое и новое изображения имеют разные пропорции, то результат будет печальным. А главное, что в некоторых случаях невозможно использовать файлы графических форматов кроме BMP, хотя через меню "Персонализация" они устанавливаются без вопросов.

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

Мониторинг активности HDD на Ассемблере

09.01.2023 | Категория: Образ мышления: Assembler | Автор: ManHunter
В качестве предисловия коротенький анекдот из времен MS-DOS: "- Висим... - Не висим. - Висим! - Не висим, говорю - диском дpыгает." И действительно, активность жесткого диска, выражавшаяся в моргании соответствующего индикатора на корпусе, говорила о работе процесса, просто надо было подождать. Но иногда такие индикаторы отсутствовали или системник стоял в таком месте, что их не было видно. В этих случаях приходилось решать задачу различными программами, которые отображали активность жесткого диска как-нибудь иначе, например, морганием светодиода ScrollLock на клавиатуре.

Вот и мне захотелось сделать что-нибудь подобное. Естественно, на Ассемблере. Для начала некоторые данные, о которых не знает FASM.
  1. struct DISK_PERFORMANCE
  2.     BytesRead     dq ?
  3.     BytesWritten  dq ?
  4.     ReadTime      dq ?
  5.     WriteTime     dq ?
  6.     IdleTime      dq ?
  7.     ReadCount     dd ?
  8.     WriteCount    dd ?
  9.     QueueDepth    dd ?
  10.     SplitCount    dd ?
  11.     QueryTime     dd ?
  12.     StorageDeviceNumber dd ?
  13.     StorageManagerName  rd 8
  14. ends
  15.  
  16. IOCTL_DISK_PERFORMANCE = 0x70020
Дальше немного теории. Текущее состояние жесткого диска можно узнать при помощи функции DeviceIoControl с параметром IOCTL_DISK_PERFORMANCE. При удачном выполнении операции будет возвращена заполненная структура DISK_PERFORMANCE. В документации написано, что в полях ReadTime и WriteTime передаются счетчики времени, необходимые для выполнения операций чтения или записи. Сохранив текущее значение этих счетчиков и периодически сравнивая текущие значения с сохраненными данными, можно смело утверждать о выполнении операции жестким диском. И, соответственно, каким-то образом оповещать об этом пользователя.

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

Получение кода HTML-страницы и отдельных тегов

21.12.2022 | Категория: Образ мышления: Assembler | Автор: ManHunter

Получение кода HTML-страницы и отдельных тегов

Ранее мы уже познакомились с такой интересной штукой, как встроенный браузер на Ассемблере. Но его применение именно в таком виде весьма ограниченно. А вот работа с исходным текстом загруженной страницы, извлечение из нее данных, взаимодействие с элементами - это совершенно другой уровень полезности.

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

Парсинг метаданных WAV-файлов на Ассемблере

23.11.2022 | Категория: Образ мышления: Assembler | Автор: ManHunter

Парсинг метаданных WAV-файлов на Ассемблере

Формат WAV, разработанный совместно IBM и Microsoft, чаще всего используется для хранения несжатого потокового аудио. Несмотря на авторство MS и повсеместное использование WAV-файлов в Windows, системными средствами извлечь из них метаданные невозможно. Ну и ничего страшного, внутренний формат файлов достаточно простой, так что распарсим его самостоятельно.

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

prev 01 ... 06 07 08 09 10 11 12 ... 68 next
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.08 сек. / MySQL: 2 (0.0025 сек.) / Память: 4.5 Mb
Наверх