Категория > Новости > Заплатка на асме. Создаем панель инструментов для Windows на Flat Assembler - «Новости»
Заплатка на асме. Создаем панель инструментов для Windows на Flat Assembler - «Новости»24-01-2022, 00:01. Автор: Ефросиния |
инженеры NASA обнаружили, что основная антенна радиосвязи запущенного к Юпитеру зонда не раскрылась полностью. Разве они бросили неисправное устройство на произвол судьбы и обратились к правительству за финансированием нового? Нет, они проявили находчивость и техническую смекалку, в результате чего пусть и не без труда, но успешно провели многолетнюю исследовательскую миссию.Выбор цели и средстваРассматриваемая в статье ситуация находится где‑то между этими крайними случаями. Наибольшие неудобства описанный дефект доставляет при использовании развернутых на весь экран программ, потому что попадает либо на адресную строку браузера, либо на главное меню приложения. Использование же программ в оконном режиме, с подгонкой их местоположения после каждого запуска, грозит нервным расстройством. Я готов пожертвовать частью полезной площади экрана, если изображение не будет попадать на дефектную область. Основная операционная система на моем компьютере — Windows. Как исключить полосу в верхней части экрана из доступного пространства рабочего стола, чтобы окна приложений при развертывании не попадали на нее? Идею мне подсказала панель задач: она монополизирует нижнюю часть экрана и никогда не перекрывается окнами программ. Может быть, достаточно будет прикрепить ее к верхней части экрана? Нет, во‑первых, она не совсем подходит по размеру, а во‑вторых, сама приобретает неприглядный вид из‑за дефекта. А нельзя ли сделать «заплатку» с такими же свойствами, но чтобы пользователь мог контролировать ее размер и цвет? Оказывается, можно, и ответ быстро нашелся в справочнике по Win32 API — это панель инструментов рабочего стола. Направление работы прояснилось, осталось выбрать подходящий инструмент для ее выполнения. Основное средство разработки с использованием Win32 API — компилятор С. Но для вызова нескольких функций операционной системы хочется воспользоваться чем‑то более простым и изящным. Поэтому я отправился в темную кладовую своей памяти и нашел там пыльную шкатулку с плоским монтажником. Если кто‑то еще не догадался, то так звучит по‑русски Flat Assembler в варианте Яндекс‑переводчика. Удивительно, но продукт, с которым я познакомился еще в середине 2000-х, продолжает жить и здравствовать. Что умеет Flat Assembler?Давай прямо сейчас разберемся со средой, в которой будем работать. На странице загрузки выбери архив с последней версией сборки для Windows, загрузи его и распакуй куда‑нибудь на диск. В трех мегабайтах папки Создай пустую папку Текстовый редактор интегрированной среды FASMW Шаблон Windows-приложения на ассемблере состоит из следующих основных частей:
В целом текст программы должен быть понятен любому, кто использовал Win32 API. Во‑первых, сам API предельно прост. Параметры всех функций ожидают 32-битных значений аргументов, а если данные не укладываются в этот размер, то передается 32-битный указатель на массив или структуру опять же 32-битных значений. Исключение, пожалуй, только строки. Возвращаемое функцией значение (например, код завершения) передается через регистр Во‑вторых, Flat Assembler на основе своего набора макроинструкций предлагает синтаксический сахар, который делает использование API максимально приближенным к высокоуровневым языкам программирования. Скажем, довольно сложный вызов функции создания окна описывается одной строкой:
invoke CreateWindowEx,0,_class,_title,WS_VISIBLE+WS_DLGFRAME+WS_SYSMENU,128,128,256,192,NULL,NULL,[wc.hInstance],NULL
Здесь Описание оконной процедуры WindowProc тоже не должно вызвать затруднений:
proc WindowProc uses ebx esi edi, hwnd,wmsg,wparam,lparam
...
ret
endp
Соглашение Win32 API требует, чтобы после возврата из процедур обратного вызова (callback-процедур) значения регистров Теперь ты можешь скомпилировать и выполнить эту программу. Но сначала укажи путь к папке с подключаемыми директивой Настройка пути к подключаемым файлам Создание обработчика сообщения WM_CREATEСо средой разработки разобрались, приступим к работе над программой. Если раньше ты никогда не программировал панели рабочего стола Windows, то сейчас самое время изучить документацию. Но перед этим хочу обратить внимание на основные моменты. Панель рабочего стола не является каким‑то уникальным объектом операционной системы. Роль панели может играть любое окно, созданное функцией
После резервирования новой области операционная система запрещает ее использование окнами приложений при их максимизации, освобождает от значков рабочего стола (если таковые на ней были) — и, в общем‑то, всё. За внешний вид панели отвечает ассоциированное с нею окно, которое теоретически должно закрыть собой освобожденное пространство и принять соответствующий стиль. Но по большому счету может этого и не делать. С помощью пункта меню File → Save as... сохрани открытый в редакторе файл под именем
cmp [wmsg],WM_CREATE
je.wmcreate
и напишем сам обработчик перед меткой
.wmcreate:
stdcall wmCreateProc, [hwnd]
jmp .finish
infoМетки, которые начинаются с точки, являются локальными по отношению к процедуре, где они используются (в данном случае — Наш обработчик вызывает пока еще не существующую процедуру
proc wmCreateProc,hwnd
invoke MessageBox,[hwnd],_title,_class,MB_OK+MB_ICONINFORMATION
xor eax,eax
ret
endp
infoВот промежуточный вариант программы, который выводит отладочное сообщение: appbar-ver1.asm. Процедура infoВнимательно следи за тем, чтобы количество и порядок аргументов в команде вызова процедуры всегда соответствовали количеству и порядку параметров в ее описании. FASMW это не контролирует, и, если допустить небрежность, можно получить трудно обнаруживаемые ошибки. Перейти обратно к новости |