|
Вопрос # 1 556/ вопрос решён / |
|
Доброго времени суток, уважаемые эксперты!
Как запустить из своей программы консольное приложение с параметрами, чтобы консоль закрывалась только по желанию пользователя?
 |
Вопрос задал: Евгений Eklmn (статус: Посетитель)
Вопрос отправлен: 4 мая 2008, 14:50
Состояние вопроса: решён, ответов: 2.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, Трофимов Евгений!
Когда то меня очень волновал подобный вопрос и я нашёл решение, которое хорошо работало практически везде.
Идея заключается в том, что бы создать временный бат файл и запустить его. Для этого я использовал приблизительно сделующий код.
var sl:TStringList;
tempfile:stringl
begin
sl:=TStringList.create;
sl.add('title MyProg');//Украшательство - поменяет заголовок консоли на указанный
sl.add('cd '+workdir);//так как батник будет в временном каталоге, то перейдем в рабочий каталог.
//этот каталог обычно должен быть равен каталогу, где находиться запускаемая программа
sl.add('MyProg.exe param1 param2');//запуск программы с параметрами
sl.add('pause');//после выполнение прогаммы на экране будет надпись "нажмите Enter", после нажатия которого окно
закроется
sl.SaveToFile(tempfile);
Winexec(PAnsiChar(tempfile),3);
о том, как найти временный каталог и сформировать имя для временного файла оставлю на самостоятельное иследование, подскажу, что в разделе статей есть моя статья, с которой можно понять, как это сделать
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 4 мая 2008, 16:00
Оценка за ответ: 5
|
Ответ #2. Отвечает эксперт: Паровоз
Здравствуйте, Трофимов Евгений!
Если я правильно понял вопрос, его можно решить следующим образом: в конце кода консольной программы ставите оператор Readln. А консольную программу вызываете следующим образом:
uses
ShellAPI;
begin
ShellExecute(Handle,nil,'cmd.exe','/K MyProg.exe param1 param2',nil,SW_RESTORE);
end;
 |
Ответ отправил: Паровоз (статус: 10-ый класс)
Время отправки: 7 мая 2008, 18:51
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 5; последнее сообщение — 6 мая 2008, 23:03; участников в обсуждении: 4.
|
Паровоз (статус: 10-ый класс), 4 мая 2008, 21:49 [#1]:
Что то я не понял смысла "только по желанию пользователя". Консоль можно закрыть любой другой человек (по своему хотению), нажав ту же клавишу Enter. Консоль можно закрыть и другими способами: с помощью 'крестика' в правом верхнем углу консольного окна или из диспетчера задач.
|
|
Евгений Eklmn (статус: Посетитель), 4 мая 2008, 22:09 [#2]:
Я о том что когда такое приложение запускается не через комаедную строку, то после завершения оно само закрывается, не давая пользователю просмотреть результат работы.
Генерация случайных чисел - слишком важный вопрос, чтобы оставлять его на волю случая. (Роберт Ковзю, Окриджская лаборатория)
|
|
Drozdov D.V. (статус: 4-ый класс), 4 мая 2008, 23:11 [#3]:
Я согласин с Вадим К!
|
|
Вадим К (статус: Академик), 5 мая 2008, 00:45 [#4]:
Добавлю, что добаление строки pause в батник я делал опциональным. На самом деле закроется или нет консольное окно зависит от настроек. И некоторые твикеры так и настраивают.
Но мой способ имеет имеет приимущество в том, что можно выставить и текущий каталог, и переменные окружения, и всё что угодно. Даже запускать по несколько програм.
Кстати, еще одно замечание. Однажды мне пришлось сделать "длинный" запуск. То есть, была обычная пакетная обработка. И надо было в основное приложение как-то сигнализировать для прогрессбара.
я написал маленькое консольное приложение с одной строки - SendMessage(strtoint(Paramstr(1)), WM_COPY,1,1);
а сам хендл передал через параметры. В батник понавставлял вызовов это минипроги. и она сама сообщала основной программе.
Запустить батник с параметрами просто, а в самом батнике обратиться к параметрам ещё проще. Первый параметр это %1, второй - %2 и так далее.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Паровоз (статус: 10-ый класс), 6 мая 2008, 23:03 [#5]:
Вообще то, для этих целей служит запуск командного процессора с ключом /K.
|
31 января 2011, 19:31: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|