{Act:
0 - Очистка атомов, 1 - чтение атомов, 2 - запись атомов} {Uniq
- Уникальный идентификатор} {AtomNfo
- Информация для записи} Function
AtomDo(Act:integer;Uniq,AtomNfo:string); Procedure CleanAtoms; var P:PChar; i:Word; begin GetMem(p,
256); For i:=0 to $FFFF do begin
GlobalGetAtomName(i, p, 255); if StrPos(p,
PChar(Uniq))<>nil then
GlobalDeleteAtom(i); end;
FreeMem(p); end; Function ReadAtom:string; var P:PChar; i:Word; begin GetMem(p,
256); For i:=0 to $FFFF do begin
GlobalGetAtomName(i, p, 255); if StrPos(p,
PChar(Uniq))<>nil then break; end;
result:=StrPas(p+length(Uniq));
FreeMem(p); end; begin case Act of 0 : CleanAtoms; 1 :
Result:=ReadAtom; 2 : begin
CleanAtoms;
GlobalAddAtom(PChar(Uniq+AtomNfo)); end; end;
Программа на Delphi, которая взаимодействует с Windows API для управления атомами (тип ресурса в Windows). Атомы используются для хранения небольших кусков данных, таких как строки или целые числа.
Вот разбивка каждого части кода:
Enum и константы
Первая секция определяет enum (Act) с тремя значениями: 0 - очистка атомов, 1 - чтение атомов, и 2 - запись атомов. Она также определяет две другие константы: Uniq (уникальный идентификатор) и AtomNfo (информация для записи).
Функции
В этом коде есть три функции:
CleanAtoms: Функция очищает все атомы, содержащие строку Uniq. Она делает это, перебирая все доступные атомы, получая их имена с помощью GlobalGetAtomName, проверяет, если они содержат строку Uniq с помощью StrPos, и удаляет их, если необходимо.
ReadAtom: Функция читает атом с именем, содержащим строку Uniq. Она перебирает все доступные атомы, получая их имена, и проверяет, если они содержат строку Uniq. Если она находит такой атом, она выходит из цикла и возвращает значение атома как строку.
AtomDo: Функция, которая принимает три параметра: Act (целое число, указывающее, какой действие выполнить), Uniq, и AtomNfo. Она использует case-заявление для определения, какое действие выполнить в зависимости от значения Act.
Процедура
Есть одна процедура, CleanAtoms, которая похожа на функцию с тем же именем. Однако, она не возвращает никакого значения.
Основной код
Основной код находится внутри блока begin в конце файла. Он использует case-заявление для определения, какое действие выполнить в зависимости от значения Act. Если Act равен 0, он вызывает функцию CleanAtoms. Если Act равен 1, он вызывает функцию ReadAtom и возвращает ее результат. Если Act равен 2, он вызывает функцию CleanAtoms, а затем добавляет новый атом с именем, содержащим Uniq и AtomNfo.
В целом, этот код предоставляет простой способ управления атомами в Windows с помощью Delphi.
Вот несколько предложений:
Рассмотрите добавление обработки ошибок в ваших функциях и процедурах. Например, что происходит, если атом не найден или возникла проблема с аллокацией памяти?
Вам может понравиться использовать более описательные имена переменных вместо одиночных буквенных переменных, таких как P и i.
Если вы планируете использовать этот код в более крупном приложении, вам может потребоваться разделить логику на различные модули (например, один модуль для управления атомами, другой для чтения и записи атомов).
Скрипт ReadAtom и CleanAtoms для работы с атомами в Windows, позволяющий записать, прочитать и удалить информацию.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.