Большинство таких компонентов находится на вкладке "Система" панели компонентов. Лишь различные специфические компоненты типа громкости системы находятся на более подходящих вкладках, ну да о громкости речь уже была.
Нас будет интересовать только "Система". И первым делом - память. Компонент MemoryStatus очень прост в использовании, нужно лишь вызвать его метод для обновления сведений.
Таймер здесь срабатывает каждые 1000 миллисекунд, и память передаётся в замечательный компонент FormatStr, который формирует строку из значений. В его параметре Mask передаваемые значения представлены символами %х, где х - номер верхней точки. И готовая строка выдаётся в надпись, у которой AutoSize=False, потому что иначе размеры будут автоматически подгоняться, что может нарушить вид.
Можно представить данные и по-другому.
Здесь данные представлены на графике. Максимальное значение графика должно определяться автоматически, исходя из максимального размера памяти, но это невозможно из-за отсутствия нужного метода. Будем надеяться, что разработчики HiAsm примут меры. А пока прописываем в параметре MaxH размер вашей памяти (размерность зависит от выбранного значения Scale у компонента MemoryStatus). Разумеется, это подойдёт только для для компьютера с таким же размером памяти, а для другого размера нужно будет перекомпилировать её, выполнив запуск проекта с новым значением параметра.
Теперь о процессоре. Компонент CPUUsage вычисляет загрузку процессора. Её также удобно представить на графике, но точка для MaxH уже не нужна: загрузка вычисляется в процентах, так что максимум будет 100.
Здесь сложностей нет, зато изменился вид графика. Это тоже легко, просто поэкспериментируйте с его параметрами.
Ещё некоторую информацию о компьютере даёт компонент ComputerInfo.
Компонент EnumProcess предназначен для управления запущенными процессами. Функций у него немало.
Внимание! Эта схема может долго запускаться, но это не зависание.
Кажую секунду здесь перечисляются все процессы. Событие onProcess выдаёт имя каждого, и оно сохраняется в Memory. А затем через разветвитель читается память процесса и пользователь. Всё это запихивается в многомерный поток и подаётся в таблицу, которая каждую секунду очищается и снова заполняется.
Ну а сейчас я расскажу о группе компонентов, которые считывают характеристики "железа". Они тоже находятся на вкладке "Система", в группе "WMI". Все они очень похожи друг на друга, поэтому я рассмотрю лишь один из них. Пусть это будет MotherBoardInfo. Материнская плата.
Как видите, построение запроса и вывод ответа - дело лёгкое, аналогичное всем предыдущим примерам. Так что и другие компоненты для определения параметров железа вы сможете применять.
В заключение отмечу, что есть и другие компоненты для определения параметров разных системных устройств и самой системы. Вы без труда найдёте их на той же вкладке.
Непонятно, для чего нужно Query. На onInfo всё равно ничего не выдаётся, а нижние точки работают и без Query.
ОтветитьУдалитьДа, впечатляющие функции при элементарности схем. Вся сложность спрятана внутри компонентов.
ОтветитьУдалитьНачинающему программеру тестирование железа и ОС - до лампочки, но вот работа по таймеру и способ заполнения строчек на экране - порадовали.
Такое впечатление, что некоторые компоненты взаимодействуют между собой намного лучше, чем с другими. Например, Usage CPU и График. Одна связь - и все работает. Но вот попытки научить график реагировать на другие компоненты, типа кнопок, ни к чему не привели.
Подскажите пример, когда удается на график отображать действия пользователя.
Вводить только значения от -1 до 1, потому что в параметрах графика так задано. Также показана отрисовка синусоиды. Качать.
ОтветитьУдалитьА можно пример программы для убивания процеса.
ОтветитьУдалитьHiAsm\Elements\Delphi\Example\System\ProgMan.SHA
ОтветитьУдалитьЯ работаю с ком портом. В потоке я указываю сколько байт мне надо принять как можно проверить сколько байт пришло чтоб создать условия проверки правельности принятых байтов.
ОтветитьУдалитьА как правильно определить загрузку
ОтветитьУдалитьнапример четырехядерного процессора?
Почемуто правильно отображает только когда
выставляешь номер 4, тогда загрузка отображается также как в дисп.задач.
проверено при архивировании и задании соответствия процессу (архиватору) определенного процессора.
И как при запуске программы передать
компоненту номер опрашиваемого процессора?
Извините, если вопросы туповаты.
Спасибо.
По идее, процессоры нумеруются с 0, т.е. 0, 1, 2, 3. Для каждого процессора - своя загрузка. Если выставить 4, то должна выводиться общая загрузка. Я проверил - у меня сработало.
ОтветитьУдалитьНомер процессора из программы не передать, его можно задать только в файле проекта, потому что код компонента не содержит нужной функции. Но её можно добавить. Для этого выделите компонент и нажмите Ctrl+G.
Перед строчкой "NumberCPU=Номер опрашиваемого процессора|1|1" добавьте @, чтобы получилось "@NumberCPU=Номер опрашиваемого процессора|1|1". Затем сохраните и закройте эту вкладку.
Снова выделите компонент и нажмите Ctrl+F. Откроется код компонента. В разделе public добавьте новую вот так: procedure _work_doNumberCPU(var _Data:TData; Index:word);
Затем сразу после слова implementation (оно чуть ниже) с новой строки вставьте код:
procedure THICPUUsage._work_doNumberCPU;
begin
_prop_NumberCPU := ToInteger(_Data);
end;
Сохраните и перезапустите HiAsm. Теперь из параметра компонента можно сделать точку.
Все прекрасно работает.
ОтветитьУдалитьОгромное спасибо!
Использую сторонний компонент ProcMemory (http://www.hiasm.com/xf/topic.php?t=8207) Столкнулся тут с непонятной проблемой. Делаю трейнер для игры. Есть одно значение, оно идет как Float = 26 в виде 4Bytes = 1104150528 судя по Cheat Engine.
ОтветитьУдалитьЯ пытаюсь заменить значение 26 на 1000. То есть 1000 = 1148846080. Пробую заменять значение - не меняется. Не пойму почему. С другими не Float значениями нормально.