Blog. Just Blog

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

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

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

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, хотя через меню "Персонализация" они устанавливаются без вопросов.

Читать статью целиком »
Просмотров: 450 | Комментариев: 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 передаются счетчики времени, необходимые для выполнения операций чтения или записи. Сохранив текущее значение этих счетчиков и периодически сравнивая текущие значения с сохраненными данными, можно смело утверждать о выполнении операции жестким диском. И, соответственно, каким-то образом оповещать об этом пользователя.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

APE - формат музыкальных файлов, обработанных при помощи популярного кодека Monkey's Audio. Он позволяет кодировать цифровой звук без потерь при неплохом уровне компрессии данных. Сегодня мы научимся извлекать из этих медиафайлов данные об исполнителе, названии трека и т.п.

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

01 ... 04 05 06 07 08 09 10 ... 67
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2023
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.09 сек. / MySQL: 3 (0.0227 сек.) / Память: 4.5 Mb
Наверх