Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 556

/ вопрос решён /

Доброго времени суток, уважаемые эксперты!
Как запустить из своей программы консольное приложение с параметрами, чтобы консоль закрывалась только по желанию пользователя?

Евгений Eklmn Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Евгений 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

Евгений Eklmn (статус: Посетитель), 4 мая 2008, 22:09 [#2]:

Я о том что когда такое приложение запускается не через комаедную строку, то после завершения оно само закрывается, не давая пользователю просмотреть результат работы.
Генерация случайных чисел - слишком важный вопрос, чтобы оставлять его на волю случая. (Роберт Ковзю, Окриджская лаборатория)
Drozdov D.V.

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)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:44
Выполнено за 0.03 сек.