Я пытаюсь использовать некоторые инструменты командной строки Windows из короткой программы Pascal. Чтобы было проще, я пишу функцию DoShell, которая берет строку командной строки в качестве аргумента и возвращает тип записи, называемый ShellResult, с одним полем для кода завершения процесса и одним полем для выходного текста процесса.
У меня серьезные проблемы с некоторыми стандартными библиотечными функциями, которые не работают должным образом. Функция DOS Exec() фактически не выполняет команду, которую я передаю ей. Процедура Reset() дает мне ошибку выполнения RunError (2), если я не установил режим компилятора . В этом случае я не получаю ошибки во время выполнения, но функции Readln(), которые я использую в этом файле, на самом деле ничего не читают, а кроме того, функции Writeln(), используемые после этой точки в выполнении кода, тоже ничего не делают.
Вот исходный код моей программы. Я использую Lazarus 0.9.28.2 beta, с Free Pascal Compiler 2.24
program project1;
Установка Turbo Pascal на ОС Win7 64-bit. Основы программирования. Паскаль. Урок №1.
uses
Classes, SysUtils, StrUtils, Dos
< you can add units after this >;
type
ShellResult = record
output : AnsiString;
exitcode : Integer;
end;
function DoShell(command: AnsiString): ShellResult;
var
exitcode: Integer;
output: AnsiString;
exepath: AnsiString;
exeargs: AnsiString;
splitat: Integer;
F: Text;
readbuffer: AnsiString;
begin
//Initialize variables
exitcode := 0;
output := »;
exepath := »;
exeargs := »;
splitat := 0;
readbuffer := »;
Result.exitcode := 0;
Result.output := »;
//Split command for processing
splitat := NPos(‘ ‘, command, 1);
exepath := Copy(command, 1, Pred(splitat));
exeargs := Copy(command, Succ(splitat), Length(command));
//Run command and put output in temporary file
Exec(FExpand(exepath), exeargs + ‘ >__output’);
exitcode := DosExitCode();
//Get output from file
Assign(F, ‘__output’);
Reset(F);
Repeat
Readln(F, readbuffer);
output := output + readbuffer;
readbuffer := »;
Until Eof(F);
//Set Result
Result.exitcode := exitcode;
Result.output := output;
end;
var
I : AnsiString;
R : ShellResult;
begin
Writeln(‘Enter a command line to run.’);
Readln(I);
R := DoShell(I);
Writeln(‘Command Exit Code:’);
Writeln(R.exitcode);
Writeln(‘Command Output:’);
Writeln(R.output);
end.
спросил(а) 2010-05-04T03:36:00+04:00 13 лет, 2 месяца назад
Источник: progi.pro
Как запустить программу паскаль в командной строке
Процедура Readln используется не только для задержки экрана. Ее основная задача — ввод данных с клавиатуры. В этой статье мы научимся вводить числа с клавиатуры, и потом выводить их на экран. Для этого нам будет необходимо познакомиться с разделом .
#8. Компиляция и запуск java программы с командной строки
Div, Mod, сложение, вычитание в Pascal.
Помимо операций умножения и сложения, над целочисленными переменными производятся операции Div (операция целочисленного деления), Mod (вычисление остатка от целочисленного деления), операция вычитания «-».
Abs, Sqr в Pascal.
Abs — функция языка Паскаль, которая вычисляет модуль числа.
Sqr — функция языка Паcкаль, которая возводит число в квадрат.
Циклы и массивы
Массивы. Регулярные типы.
В простых типах данных каждое данное имеет свое название (идентификатор). В этом разделе вводится структурная взаимосвязь между данными, хранимыми в оперативной памяти путем организации массива, .
Подпрограммы, определенные пользователем.
Технология программирования с использованием подпрограмм предусматривает разбиение программ на логически связанные, но функционально-замкнутые компоненты, имеющие свое имя, что дает следующие .
Командная строка.
Команда смены текущего каталога CD.
Windows» Категория: Командная строка.
После запуска приглашение командной строки показывает текущий каталог. По умолчанию, это каталог профиля текущего пользователя. Для смены текущего каталога используется специальная команда CD.
Запуск командной строки.
Windows» Категория: Командная строка.
Запустить командную строку можно несколькими способами:
- Пуск – Все команды – Стандартные – Командная строка.
- Пуск – Выполнить – Вводим cmd.exe – Нажимаем Ok.
- Заходим в папку C:WINDOWSsystem32 и запускаем cmd.exe.
Синтаксис команд командной строки. Файловая структура. Групповые символы.
Windows» Категория: Командная строка.
Прежде чем начать изучение команд, необходимо познакомиться с некоторыми первоначальными сведениями, которые необходимы для дальнейшего изучения командной строки.
Перенаправление ввода-вывода и конвейеризация.
Windows» Категория: Командная строка.
- сообщения можно выводить не на экран (стандартный выходной поток), а в файл или на принтер (перенаправление вывода);
- читать входные данные можно не с клавиатуры (стандартный входной поток), а из заранее подготовленного файла (перенаправление ввода);
- передавать сообщения, выводимые одной программой, в качестве входных данных для другой программы (конвейеризация или композиция команд).
Команда MKDIR и RMDIR для создания и удаления каталога.
Windows» Категория: Командная строка.
Команда MKDIR используется для создания каталога или подкаталога. Команда имеет следующий синтаксис: MKDIR[диск:]путь. Как видно из синтаксиса команда, параметр «путь» является обязательным. Данный параметр определяет название создаваемого каталога.
Команда ATTRIB для изменения атрибутов файла.
Windows» Категория: Командная строка.
Команда ATTRIB используется для изменения атрибутов одного или нескольких файлов. Для того чтобы посмотреть атрибуты того или иного файла, необходимо щелкнуть по нему правой кнопкой мыши и выбрать пункт свойства. Для примера, создадим на диске «С» текстовый файл «atribut.txt». Щелкнем правой кнопкой мыши по этому файлу и в контекстном меню выберем пункт «Свойства».
Команда COPY для копирования одного или нескольких файлов.
Windows» Категория: Командная строка.
Команда COPY при работе в командной строке позволяет копировать один или несколько файлов. Команда имеет синтаксис: COPY[/D][/V][/N][/Y | /-Y][/Z][/L][/A | /B]источник[/A | /B][+ источник[/A | /B] [+ . ]][результат [/A | /B]]. Источником является имя копируемого файла, а результатом является каталог, в который будет помещена копия этого файла и/или имя создаваемого файла.
Команда XCOPY.
Windows» Категория: Командная строка.
В прошлом уроке мы рассмотрели команду COPY, предназначенную для копирования одного или нескольких файлов. Эта команда имеет ряд недостатков. Например, с ее помощью нельзя скопировать системные и скрытые файлы. Команда COPY копирует файлы, но не может копировать каталоги. Для подобных целей была придумана команда XCOPY, которая выполняет те же функции, что и команда COPY, и имеет ряд дополнительных функций.
Команда XCOPY (продолжение).
Windows» Категория: Командная строка.
Команда XCOPY может создавать каталог назначения для копируемых файлов.
Источник: mojainformatika.ru
Как запустить командную строку из программы на паскале?
Мне нужно открыть файл (в частности, музыкальные файлы) с помощью программы по умолчанию для этого типа файлов из программы на паскале. Пока что я думаю, что лучший способ сделать это — использовать командную строку для запуска команды:
open C:/Users/defaultuser0/Music/filename.wav
Но я не уверен, как сказать cmd сделать что-то из Паскаля.
Erin Garoni 27 Апр 2017 в 04:44
3 ответа
Лучший ответ
Предполагая, что вы используете Windows, вам нужно использовать процедуру ShellExecute (и включить модуль шеллапи). Команда, вероятно, будет
ShellExecute (application.handle, ‘open’, ‘C:/Users/defaultuser0/Music/filename.wav’, nil, nil, SW_MAXIMIZE)
Но вам, возможно, придется немного повозиться с этим. Прочитайте документацию процедуры системы.
No’am Newman 27 Апр 2017 в 05:12
В Lazarus есть вызов OpenDocument, который абстрагирует эту функциональность. В Windows он перенаправляется к функции ShellExecuteW, а в * nix пытается передать ее соответствующей открытой программе на рабочем столе (например, «Открыть / запустить в Windows»).
Реализация также является подключаемой, поэтому, если вы хотите открыть определенный документ по-другому (например, PDF-файлы непосредственно в Adobe вместо браузера), вы можете написать перехват.
Marco van de Voort 28 Апр 2017 в 11:24
Этот код может помочь вам:
swapvectors; exec(‘cmd’,’/c open «C:/Users/defaultuser0/Music/filename.wav»‘); swapvectors;
Вы должны использовать модуль DOS, чтобы использовать этот код:
uses dos. ;
(Извините за мой английский)
Источник: question-it.com