Вызов командной строки с помощью Лазаруса

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Вызов командной строки с помощью Лазаруса

Сообщение Sinill57 » 14.06.2012 02:00:31

Передо мной возникла следующая задача: требуется, чтобы по нажатию кнопки, лазарус открывал командную строку и нужную директорию там. А вообще надо с помощью pdflatex'а скомпилировать данный файл(путь к нему вводится в том же окне как переменная стринг) через командную строку, что должно происходить после нажатия кнопки в лазарусе. Извиняюсь если криво объяснил.
Написал такое вот чудо(привожу только часть кода):
var AProcess: TProcess;


AProcess := TProcess.Create(nil);
AProcess.Options := AProcess.Options + [poWaitOnExit];
AProcess.CommandLine:= 'cmd.exe';
AProcess.Execute;
AProcess.Free;

печаль в том, что хоть я пишу AProcess.CommandLine:= 'cmd.exe'; , что AProcess.CommandLine:= 'cmd.exe C: cd\lazarus'; разницы при запуске никакой. Где ошибка? как мне открыть вот такой путь например? (а потом желательно, открыв такую папку запустить в ней ещё программу, как написать здесь ещё и этьо не представляю)

господа, прошу помощи! извиняюсь, если коряво объяснил суть проблемы
Sinill57
незнакомец
 
Сообщения: 7
Зарегистрирован: 14.06.2012 01:50:49

Re: Вызов командной строки с помощью Лазаруса

Сообщение Ism » 14.06.2012 14:17:04

Process1.Active:=false;
Process1.ShowWindow:=swoShow;
Process1.Executable:='cmd';
Process1.Parameters.Clear;
Process1.Parameters.Add('/k');
Process1.Parameters.Add('notepad.exe');
Process1.Execute;


В новом лазарусе параметры записываются по другому
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Вызов командной строки с помощью Лазаруса

Сообщение Sinill57 » 14.06.2012 15:35:59

А тип переменной Process1 по прежнему TProcess?
И за "новый" лазарус версия 0.9.30.4 сойдёт?
Sinill57
незнакомец
 
Сообщения: 7
Зарегистрирован: 14.06.2012 01:50:49

Re: Вызов командной строки с помощью Лазаруса

Сообщение Ism » 14.06.2012 15:53:02

Это пример для TProcess Lazarus 0.9.30.4
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Вызов командной строки с помощью Лазаруса

Сообщение Sinill57 » 14.06.2012 16:28:07

Спасибо.. я пока убрал параметры, и попытался вашим методом просто запустить командную строку. Но лазарус пишет следующее: "Проект Project1.exe вызвал класс исключения 'External: SIGSEGV' " что это значит?
Sinill57
незнакомец
 
Сообщения: 7
Зарегистрирован: 14.06.2012 01:50:49

Re: Вызов командной строки с помощью Лазаруса

Сообщение Ism » 14.06.2012 17:29:34

Возможно процессу некуда писать, попробуйте [poWaitOnExit,poUsePipes]
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Вызов командной строки с помощью Лазаруса

Сообщение Sinill57 » 15.06.2012 00:24:38

и куда это вписывать теперь? всё в те же параметры? или в Options?

Добавлено спустя 48 минут 18 секунд:
А вообще, жутко был бы признателен, если вы бы сюда поместили вариант программы, позволяющей открыть командную строку, и в ней данную папку. Или хотя бы объяснить, как это делается.. или во 2м сообщении это и было?
Sinill57
незнакомец
 
Сообщения: 7
Зарегистрирован: 14.06.2012 01:50:49

Re: Вызов командной строки с помощью Лазаруса

Сообщение iskander » 15.06.2012 16:10:14

Sinill57 писал(а):А вообще, жутко был бы признателен, если вы бы сюда поместили вариант программы, позволяющей открыть командную строку, и в ней данную папку

Код: Выделить всё
   AProcess := TProcess.Create(nil);
   try
     AProcess.ShowWindow := swoShow;
     AProcess.Options := AProcess.Options + [poWaitOnExit];
     AProcess.Executable := 'cmd';
     SetCurrentDir('C:\lazarus');
     AProcess.Execute;
   finally
     AProcess.Free;
   end;
iskander
энтузиаст
 
Сообщения: 614
Зарегистрирован: 08.01.2012 18:43:34

Re: Вызов командной строки с помощью Лазаруса

Сообщение Sinill57 » 16.06.2012 00:19:09

Кр-р-расота! Спасибо-спасибо-спасибо! Теперь для полного счастья понять бы, как теперь, выбрав путь, написать имя программы а за тем имя файла.
Как-то так:
K:\practics>
K:\practics> pdflatex First.tex
и запустить это.
Буду очень признателен!
Sinill57
незнакомец
 
Сообщения: 7
Зарегистрирован: 14.06.2012 01:50:49

Re: Вызов командной строки с помощью Лазаруса

Сообщение Ism » 16.06.2012 00:30:33

Не выйдет, нет связи с процессом для записи. Но можно написать свой терминал с Memo
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Вызов командной строки с помощью Лазаруса

Сообщение Sinill57 » 16.06.2012 01:39:03

В связи с новыми факторами, переформулирую так: как теперь мне что-либо напечатать в эту открывшуюся командную строку с помощью лазаруса?

Добавлено спустя 3 минуты 31 секунду:
Ой, не увидел ваш ответ. а эта штука Memo как работает? Вроде как это просто окошко, куда можно вписать текст, разбивая его на строки, да? Недавно, ища ответ на мой вопрос, наткнулся вот на это: https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/examples/process/processdemomainform.pas
тут вроде и мемо есть, это то, что мне и нужно?
Sinill57
незнакомец
 
Сообщения: 7
Зарегистрирован: 14.06.2012 01:50:49

Re: Вызов командной строки с помощью Лазаруса

Сообщение iskander » 16.06.2012 19:16:45

Sinill57 писал(а):требуется, чтобы по нажатию кнопки, лазарус открывал командную строку и нужную директорию там. А вообще надо с помощью pdflatex'а скомпилировать данный файл(путь к нему вводится в том же окне как переменная стринг) через командную строку, что должно происходить после нажатия кнопки в лазарусе.

ИМХО запихать всё это в батник и исполнить.
iskander
энтузиаст
 
Сообщения: 614
Зарегистрирован: 08.01.2012 18:43:34

Re: Вызов командной строки с помощью Лазаруса

Сообщение Sinill57 » 17.06.2012 14:23:41

Точно.. а сам про них и не вспомнил :(
Но ведь чтобы запустить батник надо использовать другую команду, верно? Но вот какую?
Sinill57
незнакомец
 
Сообщения: 7
Зарегистрирован: 14.06.2012 01:50:49

Re: Вызов командной строки с помощью Лазаруса

Сообщение iskander » 17.06.2012 14:50:38

С помощью TProcess и запустить батник.
iskander
энтузиаст
 
Сообщения: 614
Зарегистрирован: 08.01.2012 18:43:34

Re: Вызов командной строки с помощью Лазаруса

Сообщение Nikmedber » 03.07.2014 13:59:49

Подскажите, можно как-то выполнить команду следующего вида?
xcopy \server*.* %userprofile%data /y /d
а также
xcopy \server*.* "C:Documents and SettingsАдминистраторdata" /y /d
Чем это возможно сделать? WinExec, ShellExecute, AProcess?
Тут даже вопрос скорее не как запустить эту команду, а как собрать строку для ее выполнения.
Например следущая команда работает, и работает корректно.
AProcess.CommandLine := 'ping ya.ru';

Как правильно склеивать строки для выполнения через AProcess.Execute?
'xcopy'+" "+'\server*.*'+"userprofile" и т.п.
или в место + нужно использовать &
есть команда которая передает профиль текущего пользователя в место %userprofile% ?

Добавлено спустя 17 часов 44 минуты 14 секунд:
Как запустить команду разобрался.
Теперь проблема другая, а именно в кодировке. Если в пути есть русские символы то будут крякозябли, в место например xcopy \\server\*.* с:\папка /y /d
Как правильно побороть? Как передать xcopy с кодировкой 866? pchar и смена кодировки в редакторе lazarus на 866 не помогает...
Nikmedber
незнакомец
 
Сообщения: 4
Зарегистрирован: 03.07.2014 13:47:13

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 10

Рейтинг@Mail.ru
cron