Lazarus как запустить программу

В этой статье рассказывается о том, как из своей собственной программы запускать другие программы и получать от них результат. Рассказано о специфике запуска из своей 32-ух битной программы системных утилит в Windows64.

2. Введение

  • ООП-метод, с помощью класса «TProcess» (для Lazarus — «TProcessUTF8»). Поскольку ООП сегодня считается самым правильным стилем то я его поставил на первое место;
  • С помощью функций, которые прячут ООП внутрь себя, несколько упрощая запуск другой программы.

На самом деле ООП-метод вовсе не является сложным, но если вы не очень большой фанатик ООП и привыкли только к функциям и процедурам, то запуск с помощью функций вам может больше понравиться.

3. ООП-метод запуска. TProcess

Кардинальное различие между классами «TProcess» для чистого FreePascal и «TProcessUTF8» для Lazarus — возможность в последнем использовать не сильно напрягаясь символы национального алфавита в названии запускаемых программ. Всё остальное полностью одинаково. Для использования класса «TProcess» нужно подключить к своей программе модуль «Process». В Lazarus на форму нужно поместить квазивизуальный компонент «TProcess» или «TProcessUTF8», которые находится на вкладке «System» (см. рис. 1), тогда нужный модуль добавится сам собой.

Lazarus первая программа

Если вы пользуетесь компонентом Lazarus, то первым по счёту свойством, куда он вам предложит ввести название запускаемой программы — «ApplicationName». Это свойство уже давно объявлено устаревшим (deprecated). Следующим по счёту идёт «CommandLine», которое тоже объявлено устарешим. Когда-то давно в это свойство вводилось название программы и все запускаемые вместе с ним параметры.

Сегодня для входных параметров сделан более удобный и понятный список строк — «Parameters» типа TStrings. Хотя предыдущие два свойства пока ещё остаются рабочим вариантом, но при компиляции вы увидите предупреждение.

Название запускаемой программы нужно вводить в свойство «Executable» (см. рис.2) и никуда более, если вы не хотите при очередной смене версии компилятора получить неработающую программу.

Основные свойства, которые нужны для запуска чужой программы:

  • Executable — сюда вносится имя запускаемой программы. Если программа находится в пределах стандартной переменной «PATH», то можно без указания каталога, если нет — то полное имя вместе с каталогом.
  • Parameters — дополнительные входные параметры. Это набор строк типа TStrings, поэтому один параметр в одной строке. Синтаксис всех параметров должен быть точно такой, какой полагается при обычном запуске программы в командной строке.
  • Options — опции запуска. Нужные опции перечисляются в квадратных скобках через запятую. В Lazarus ставится галочка возле соответствующей опции. Наиболее популярные опции, почти для всех ОС:
  • poUsePipes — весь вывод запущеной программы заносится в специальный поток (TProcess.Output), который можно потом загрузить в какой-нибудь более удобный для разглядывания компонент, например в TStringList или в TMemo;
  • poWaitOnExit — если запускающей программе обязательно нужно дождаться окончания работы запускаемой, то этот флаг как раз приостанавливает работу основного потока запускающей программы, пока не отработает та, которая из неё запущена. К примеру, дальнейшая работа будет строится на ответе чужой программы;
  • poStderrToOutPut — этот флаг бывает черезвычайно полезен, когда чужая программа выдаёт свои ошибки, ну или вообще какие-нибудь критически выжные сообщения не на стандартный вывод, которым обычно является экран компьютера. Здесь программу принудительно заставляют выводить вообще всё именно в стандартный вывод (TProcess.Output). Но если вам нужно мухи отдельно, а котлеты отдельно, то флаг не ставится а вывод ошибок тогда идёт в отдельный поток (TProcess.StdErr);
  • poRunSuspended — после запуска чужая программа переводится в режим ожидания, т.е. она ничего не делает, а ждёт от вас какого-нибудь пинка. Так, сходу, для чего это непременно может понадобиться я придумать не могу. Но наверняка и для этого флага найдутся веские причины.
  • Это не все опции, но остальные не особо актуальны.

После того, как все нужные свойства заполнены (как минимум должно быть имя программы в свойстве Executable), новый процесс можно запустить с помощью метода Execute(). После завершения работы и если что-то пошло не так, можно проверить свойства ExitCode и ExitStatus. Во многих случаях они будут показывать одно и тоже.

Lazarus IDE Обзор преимуществ / Особенности / Установка, Удаление / FpcUpDeluxe / 2022 / Free Pascal

Различие между ними в том, что ExitStatus — это сообщение ОС о результатах работы программы, а ExitCode — это сообщение самой программы. Проверять желательно и то и другое, поскольку сама программа не всегда в состоянии сообщить о том, что с ней произошло, а ОС не всегда знает о том, что там происходило в программе. Естественно речь идёт исключительно о какой-нибудь нештатной ситуации. Если программа отработала правильно, оба этих свойства нам не особо нужны.

Читайте также:
Установить на телефон программу антирадар

Насильно прервать работу запущеной программы можно с помощью метода Terminate(КодОшибки).

Если программа запущена в режиме ожидания (т.е. с флагом poRunSuspended), запустить в работу её можно с помощью метода Resume(), а опять приостановить с помощью метода Suspend().

Приоритет запуска программы можно выставить с помощью свойства Priority (относится только к Windows):

  • ppNormal — приоритет нормальный, как у всех. Это значение стоит по умолчанию;
  • ppHigh — приоритет чуть выше нормального;
  • ppIdle — процесс будет работать только когда система простаивает без дела;
  • ppRealTime — режим реального времени. Хотя для компьютеров общего назначения это некоторое преувеличение, но по крайней мере процессор этому приложению будет давать максимальную квоту времени на выполнение, что заметно прибавит скорости работы.

Давайте напишем простенькую программку, которая определяет, запущен ли в нашей системе какой-нибудь совершенно определённый процесс. Для усложнения программка будет универсальная, работающая как в Linux, так и в Windows.

На первый взгляд исходник выглядит черезвычайно устрашающим, но тут я не виноват, клянусь своей треуголкой. Если бы не Windows вообще и 64-ёх битная Windows в частности, то код выглядел бы в два раза проще. Как-то раз пытался я запустить из своей 32-ух битной прграммы консольную утилиту, которая сидит в каталоге SYSTEM32 и получил сообщение, что такая утилита не найдена.

При этом из командного файла она же запускалась прекрасно. Интернет подсказал, что хитрый Win64 любит иногда из системного каталога SYSTEM32 перенаправлять в системный каталог SYSWOW64 и если такое случается, то перенаправление нужно отключить функцией «Wow64DisableWow64FsRedirection()», а потом немедленно вернуть перенаправление на место с помощью «Wow64RevertWow64FsRedirection()», пока не случилось чего-нибудь ужасного. Так что если у вас что-то не будет запускаться, то нужно расскоментировать магические заклинания, которые начинаются на «Wow64». Это не болезнь именно Паскаля, а особенность работы 32-ух битных приложений в 64-ёх битной Windows. Почитать можно здесь [1].

Общие пояснения к программе:

  1. Для Windows не забудьте к имени искомого процесса приписывать точку и расширение, иначе ничего не будет найдено. Чтобы освежить память, можно открыть в Windows «Диспетчер задач». Там наглядно будет видно, как должны выглядеть имена процессов;
  2. А вот теперь то, что из «Диспетчера задач» копировать ни в коем случае не надо. В 64-ёх битной винде, 32-ух битные процессы будут дополнительно помечены » *32″. Несмотря на то, что эта пометка сидит в колонке «Имя образа», к именам процессов она никакого отношения не имеет;
  3. Как вы заметили, в свойство TProcess.Executable я поместил и название программы и её входные параметры. Действительно, на сегодняшний день это свойство является полным аналогом свойства «CommandLine». Будет ли так и дальше — посмотрим. А пока, если входной параметр коротенький и одинокий, его вполне можно писать вместе с названием программы. Если же жераметров много или они длинные, то для ясности их лучше помещать в свойство «Parameters».

Следующий примерчик показывает помещение входных параметров запускаемой программы в отдельное свойство «Parameters».

Кстати говоря, если вы из вышепредставленного кода хотите сделать функцию, но не хотите передавать в неё параметры типа TStringList, то есть возможность организации параметров в виде одной строки. Допустим строка эта называется «params». Все входные параметры запускаемой программы нужно разбавлять символом перевода строки (#10), примерно так:

а потом засунуть эту строку в свойство «Parameters» таким образом:

TStringList прекрасно воспринимает символ #10 и строки параметров будут разделены правильно.

В модуле Process есть специальная процедура CommandToList(), которая переделывает подобную строку из всех параметров в TSringList. Однако пользоваться ею надо с умом. Разделение в ней происходит по символу пробела или любым символом перевода строки. Чтобы в одну строку были занесены параметры типа «ключ значение», которые разделены между собой пробелом, ключ и значение нужно группировать с помощью двойных кавычек:

4. Простые функции запуска

Функций запуска примерно 3 штуки. Примерно, потому что формально их больше, но часть функций из модуля «Process» объявлены как «depreceted», т.е. устаревшие, а часть функций это просто модификации и вряд ли их стоит принимать за самостоятельные.

    В модуле «SysUtils»:

Эта функция — почти точная копия процедуры Exec() из TurboPascal. Основное отличие — в возвращаемом результате будет содержаться код ошибки выполнения чужой программы. Функция является простейшей надстройкой над функциями запуска программы для API той ОС, в который вы работаете. Надстройка, конечно, сильно упрощённая, однако большой проблемы в этом нет, поскольку запуск программы обычно осуществлется просто и незатейливо.

  • exename — имя запускаемой программы. Если программа лежит где-то вне системной переменной PATH, то имя писать вместе с полным путём;
  • parameters — входные параметры (ключи) запускаемой программы. Это может быть одна строка, где ключи разделены пробелами, как это делается при запуске из консоли или скрипта. Так же все ключи можно разметить в array of string, при этом одна ячейка (строка) массива — один ключ;
  • flags — тут можно добавить всего один флаг «ExecInheritsHandles», но только в том случае, если у вас Windows или OS/2. Во всех остальных случаях флаг бесполезен. Этот флаг передаёт файловые дескрипторы запускаемой программе.
Читайте также:
Программы которые могут нанести вред компьютеру

Возвращаемое значение — код ошибки выполнения. Если всё в порядке, будет возвращён 0, а вот если нет, то на код полюбоваться уже не придётся — сработает прерывание. И если прерывание никак не обработать, то программа просто вывалится. Поэтому, если есть вероятность ошибки запуска, лучше эту функцию завернуть в Try . Except . End и анализировать ошибку именно там (on E : EOSError do).
В модуле «Process»:

Эта и следующая функция являются надстройкой для класса TProcess, поэтому параметры Options для них полностью аналогичны этому же свойству TProcess.

  • curdir — рабочий каталог, где будет выполняться запускаемая программа. Может быть пустой строкой;
  • exename — имя запускаемой программы;
  • parameters — входные параметры для запускаемой программы. Массив строк. Одна строка — один параметр.
  • outputstring — это текстовые результаты работы программы, которые она могла бы выдать в консоль;
  • exitstatus — необязательный параметр. Здесь будет номер ошибки, если такое предусмотрено. Если же нет, эту переменную в функцию можно не вписывать.

Необязательный входной параметр:

  • Options — набор флагов запуска, если нужно.

Возвращаемое функцией значение:

  • Если вызывается с двумя выходными параметрами, то она возвратит 0 если попытка запуска успешна и -1 в случае какой-то ошибки;
  • Если без параметра exitstatus, то будет типа boolean и True в случае успешности попытки запуска.

Так же в модуле «Process»:

Из специфики двух последних функций запуска стоит упомяноуть, что флаг «poUsePipes», который заведует принятием вывода отработавшей программы в специальный поток, здесь указывать не нужно, он уже стоит по умолчанию.

Для простого запуска, например браузера с адресом какого-нибудь сайта, вполне подойдёт простая функция из SysUtils:

Функции из модуля Process будут интересны в плане более гибкого управления запускаемой программы с помощью параметра Options или задания специального каталога для жизнедеятельности этой программы.

5. Выводы

Несмотря на то что, по сравнению с TurboPascal, запуск чужих программ усложнился, он стал более гибким и функционально законченым. Вдобавок, по сравнению с Delphi, не нужно принимать никаких хитрых мер, чтобы заполучить вывод чужой программы в свою. Это позволяет не ломать голову над собственным кодом и не лезть в дебри чужого API, чтобы получить у себя этот же функционал, который уже реализован в чужой программе.

Источник: onecomp.ru

Введение в LAZARUS

Объектно-ориентированное программирование (ООП) – это метод программирования, при использовании которого главными элементами программ являются объекты. В основе ООП лежат 3 понятия: инкапсуляция: объединение данных с процедурами и функциями в рамках единого целого – объекта; наследование: возможность построения иерархии объектов, с использованием наследования их характеристик; полиморфизм: задание одного имени действию, которое передается вверх и вниз по иерархии объектов, с реализацией этого действия способом, соответствующим каждому объекту в иерархии.

ПО, написанное на Lazarus

  • Поддерживает преобразование проектов Delphi
  • Реализован основной набор элементов управления
  • Редактор форм и инспектор объектов максимально приближены к Delphi
  • Интерфейс отладки (используется внешний отладчик GDB)
  • Полностью юникодный (UTF-8) интерфейс и редактор и поэтому отсутствие проблем с кодом, содержащего национальные символы
  • Мощный редактор кода, включающий систему подсказок, гипертекстовую навигацию по исходным текстам, автозавершение кода и рефакторинг
  • Поддержка множества типов синтаксиса Pascal: Object Pascal, Turbo Pascal, Mac Pascal, Delphi (поддерживаются со стороны компилятора)
  • Имеет собственный формат управления пакетами
  • Авто сборка самого себя (под новую библиотеку виджетов) нажатием одной кнопки
  • Поддерживаемые для компиляции ОС: Linux, Microsoft Windows (Win32, Win64), Mac OS X, FreeBSD, WinCE, OS/2

ПО, написанное на Lazarus

Процесс создания приложения : Формирование окна программы- расположение необходимых элементов, задание размеров, изменение свойств; Написание программного кода, описание свойств элементов, доступных только во время работы приложения, описание реакций на событие появления окна, нажатие на кнопку и других; 3. Отладка программы.

  • Total Commander — 64-разрядная версия TC 8.0 компилируется с помощью Lazarus x64
  • Double Commander — двухпанельный файловый менеджер c открытым исходным кодом, работающий под Linux и Microsoft Windows.
  • easyMP3Gain — аудиоредактор для нормализации громкости mp3-файлов.
  • GreenGnome — свободная среда рабочего стола для Microsoft Windows (аналог рабочего стола для Linux).
  • PeaZip — свободный и бесплатный кроссплатформенный портативный архиватор и графическая оболочка для других архиваторов.
  • Ubuntu Control Center — центр управления операционной системой ubuntu.
  • Transmission Remote GUI — Front-end программа для управления BitTorrent

Процесс создания приложения :

  • Формирование окна программы- расположение необходимых элементов, задание размеров, изменение свойств;
  • Написание программного кода, описание свойств элементов, доступных только во время работы приложения, описание реакций на событие появления окна, нажатие на кнопку и других;

3. Отладка программы.

Главное окно Инспектор объектов Проектировщик форм Редактор кода Окно сообщений

Главное окно

Инспектор объектов

Проектировщик

Редактор кода

Окно сообщений

1. Главное окно. Здесь располагаются: меню, панель инструментов и палитра компонентов. На палитре компонентов, представляющую множество тематических вкладок, располагаются визуальные и невизуальные компоненты будущей программы. Невизуальные компоненты видны только на этапе проектирования приложения.

1. Главное окно.

Здесь располагаются: меню, панель инструментов и палитра компонентов.

На палитре компонентов, представляющую множество тематических вкладок, располагаются визуальные и невизуальные компоненты будущей программы.

Читайте также:
Сколько стоят программы для компьютера

Невизуальные компоненты видны только на этапе проектирования приложения.

2 . Инспектор объектов :

2 . Инспектор объектов :

Несколько основных свойств Name - имя объекта (текст). Caption - заголовок (текст). Текстовая надпись отображаемая на объекте. Width - ширина объекта по горизонтали (целое число) Height - высота объекта по вертикали (целое число) Top - расстояние от верхнего края объекта до верхнего края родительского объекта (то на чем расположен объект) (целое число). Left - расстояние от левого края объекта до левого края родительского объекта (целое число).

  • Свойства – отображает доступные свойства выбранного компонента . События – содержит возможные обработчики событий для выбранного компонента. ИзбранноеОгрничения .
  • Свойства – отображает доступные свойства выбранного компонента .
  • События – содержит возможные обработчики событий для выбранного компонента.
  • Избранное
  • Огрничения .

Несколько основных свойств

Name — имя объекта (текст).

Caption — заголовок (текст). Текстовая надпись отображаемая на объекте.

Width — ширина объекта по горизонтали (целое число)

Height — высота объекта по вертикали (целое число)

Top — расстояние от верхнего края объекта до верхнего края родительского объекта (то на чем расположен объект) (целое число).

Left — расстояние от левого края объекта до левого края родительского объекта (целое число).

3. РЕДАКТОР КОДА В нем следует набирать текст программы. В начале работы над новым проектом это окно редактора кода содержит сформированный Lazarus шаблон программы. Строки пронумерованы, все служебные слова выделяются жирным цветом, знаки препинания становятся красными, строки с ошибками выделяются коричневым цветом, комментарии могут заключаются в <></p><p> или (**), начинаться с // и выделяются синим. Текст программы разбивается на процедуры и функции, которые работают независимо

3. РЕДАКТОР КОДА

В нем следует набирать текст программы.

В начале работы над новым проектом это окно редактора кода содержит сформированный Lazarus шаблон программы.

Строки пронумерованы, все служебные слова выделяются жирным цветом, знаки препинания становятся красными, строки с ошибками выделяются коричневым цветом, комментарии могут заключаются в <> или (**), начинаться с // и выделяются синим.

Текст программы разбивается на процедуры и функции, которые работают независимо

4 . Проектировщик форм: при запуске Lazarus автоматически предлагает пользователю новый проект, окно под названием Form 1, и назначает его главным окном. Перенося на него элементы из палитры компонетов, тем самым оформляете его. Главное окно в проекте может быть только одно, все другие создаваемые окна будут дочерними

4 . Проектировщик форм:

при запуске Lazarus автоматически предлагает пользователю новый

проект, окно под

названием Form 1,

и назначает его

главным окном.

Перенося на него элементы из палитры компонетов, тем самым оформляете его. Главное окно в проекте может быть только одно, все другие создаваемые окна будут дочерними

5. Окно Сообщения служит для вывода сообщений при компиляции и сборке проекта.

5. Окно Сообщения служит для вывода сообщений при компиляции и сборке проекта.

Файл-Создать-Проект и выберите Приложение , или выполните команду Проект –Создать проект . Для сохранения проекта Файл- Сохранить как. Каждый проект сохраняется в отдельный каталог! Файлы проекта: Модуль программы - Unit 1.pas Проект – project1.lpi Файл Unit.lfm- файл с данными о проектировщике форм

Файл-Создать-Проект и выберите Приложение ,

или выполните команду Проект –Создать проект .

Для сохранения проекта Файл- Сохранить как.

Каждый проект сохраняется в отдельный каталог!

Файлы проекта:

Модуль программы — Unit 1.pas

Проект – project1.lpi

Файл Unit.lfm- файл с данными о проектировщике форм

5. Запуск Приложения на выполнение можно сделать нажатием клавиши F9 , или через пункт в меню Запуск или выбором соответсвующей кнопки на панели инструментов

5. Запуск Приложения на выполнение можно сделать нажатием клавиши F9 , или через пункт в меню Запуск или выбором соответсвующей кнопки на панели инструментов

Как запустить программу Lazarus ? Из каких компонентов состоит окно программы? В чем отличие невизуальных от визуальных компонентов? С помощью какого свойства меняется заголовок у компонента? Проекты сохраняются в одном файле или нет?

  • Как запустить программуLazarus?
  • Из каких компонентов состоит окно программы?
  • В чем отличие невизуальных от визуальных компонентов?
  • С помощью какого свойства меняется заголовок у компонента?
  • Проекты сохраняются в одном файле или нет?

1 . Запустите программу с компьютера. 2. Создайте новую форму. 2. Измените имя формы. 3. Поместите компонент Button на форму, измените его свойства. 4. Поместите компонент Label . Введите текст « Я программирую !». 5. Измените шрифт, цвет, расположение. 3. Сохраните проект.

  • 1 .Запустите программу с компьютера.
  • 2. Создайте новую форму.
  • 2. Измените имя формы.
  • 3. Поместите компонентButtonна форму, измените его свойства.
  • 4. Поместите компонентLabel. Введите текст « Я программирую !».
  • 5. Измените шрифт, цвет, расположение.
  • 3. Сохраните проект.

Источник: intolimp.org

Основы программирования в среде Lazarus / Основы программирования в среде Lazarus / Основы программирования в среде Lazarus

ваться и выполняться как на платформе Linux, так и на платформе Windows.

2.1.10 Первая программа

Запустите Lazarus. Выберите пункт меню Проект, Создать проект… (рис.

Рис. 2.15. Меню «Проект»

Создайте консольное приложение (рис. 2.16). Для этого выберите Кон-

сольное приложение и нажмите Создать.

2.1 Основные элементы языка

Рис. 2.16. Окно создания нового проекта

Возьмите себе за правило сразу же сохранять только что созданный про-

ект, даже если он пока пустой. Это должно стать вашей хорошей привычкой,

такой же, как чистить зубы утром и вечером! Дело в том, что во время сохране-

ния, вы можете создать папку для своего проекта, и все файлы текущего проек-

та будут сохранены в отдельной папке. Это поможет вам структурировать ваши проекты и не запутаться в них, если их будет много.

Для сохранения проекта проще всего воспользоваться кнопками на панели инструментов, рис. 2.17.

Рис. 2.17. Кнопки сохранения проекта

В открывшемся диалоговом окне сохранения проекта создайте новую пап-

ку в нужном месте, укажите имя проекта и нажмите Сохранить, рис. 2.18, 2.19.

Глава 2 Введение в язык программирования Pascal

Рис. 2.18. Стандартное диалоговое окно сохранения в Windows

Рис. 2.19. Стандартное диалоговое окно сохранения в Linux

При задании имени папки и имени проекта старайтесь, чтобы имена отра-

жали суть проекта. Это поможет вам легко ориентироваться в своих проектах,

2.1 Основные элементы языка

особенно когда их накопится достаточно много. Также помните, что если вы даете имя, состоящее из нескольких слов, то в Linux нельзя ставить пробелы между словами. В этом случае Lazarus не сможет открыть ваш проект, рис. 2.20.

Имя проекта всегда задавайте в нижнем регистре.

Рис. 2.20. Окно сообщения «Файл не найден»

После сохранения в папке с проектом появятся несколько файлов, которые мы рассмотрим позже. В окне редактора исходного кода вы увидите текст. Это заготовка кода для консольного приложения, автоматически вставляемого Lazarus (рис. 2.21).

Рис. 2.21. Заготовка кода для консольного приложения, автоматически вставляемого Lazarus

Глава 2 Введение в язык программирования Pascal

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru