Форум: "Начинающим";
Текущий архив: 2008.06.08;
Скачать: [xml.tar.bz2];
ВнизКак запустить из программы другую (консольную) программу? Найти похожие ветки
← →
Franzy (2008-05-18 18:27) [0]Есть консольная прога, которой передаются некие параметры. Требуется написать для нее своего рода визуальную оболочку. В связи с чем и вопрос... Заодно уточнить хочу, вернется ли управление оболочке сразу или только по окончании работы запущенной проги.
← →
Германн © (2008-05-18 18:39) [1]
> Заодно уточнить хочу, вернется ли управление оболочке сразу
> или только по окончании работы запущенной проги.
Это зависит от твоего желания.
← →
Franzy (2008-05-18 19:04) [2]Так как запустить-то?
← →
Renegat (2008-05-18 19:06) [3]Кури хелп по WinExec или CreateProcess.
ЗЫ А управление вернётся сразу после старта "дочерней" проги
← →
Franzy (2008-05-18 19:17) [4]1. По winexec справки нет. Что у нее за второй параметр? Первый, понятно, командная строка, а второй, который uCmdShow:cardinal?
2. Как сделать так, чтобы управление вернулось только по окончании работы консольной проги? Или хотя бы как определить, что она закончила работу?
← →
Renegat (2008-05-18 19:28) [5]> uCmdShow:cardinal
Флаг, определяющий, будет ли показываться окно программы. В данном случае, окно виртуальной машины. Ставь SW_SHOWNORMAL и всё будет =)
> Как сделать так, чтобы управление вернулось только по окончании работы консольной проги?
По хендлу, который тебе возвернула первая или вторая функция, запустить WaitForSingleObject.
← →
Германн © (2008-05-18 19:32) [6]
> Franzy (18.05.08 19:17) [4]
>
> 1. По winexec справки нет.
Врешь.
← →
Franzy (2008-05-18 19:36) [7]Можно поподробнее про функцию WaitForSingleObject? Для нее справки нет. Первый параметр у нее - это хэндл. Второй - время в миллисекундах. (Судя по названиям). Но что она делает? Или хотя бы пример.
← →
Franzy (2008-05-18 19:37) [8]2 Германн
Не знаю, может в моих дельфях справка обрезанная. Ни функции WinExec, ни функции WaitForSingleObject она не знает.
← →
Renegat (2008-05-18 19:43) [9]> Можно поподробнее про функцию WaitForSingleObject?
> что она делает?
Она приостанавливает вызвавший её поток на заданное кол-во миллисекунд, или до наступления определённого события. Чтобы она могла ждать бесконечно долго, ставь вторым парамом константу INFINITE. В данном случае, если переданный параметр - PID процесса, то она ждёт пока он не завершит работу.
← →
Германн © (2008-05-18 19:50) [10]
> Franzy (18.05.08 19:37) [8]
>
> 2 Германн
> Не знаю, может в моих дельфях справка обрезанная. Ни функции
> WinExec, ни функции WaitForSingleObject она не знает.
>
Program Files\Common Files\Borland Shared\MSHelp\
Такой каталог на диске есть?
← →
Franzy (2008-05-18 20:04) [11]Есть, объем чуть меньше 42 Мб...
Та-а-ак... WinExec требует ей передавать в качестве аргумента имя проги в формате PAnsiChar, который несовместим со string и даже TFileName. Тупо заюзал тайпкастинг, вроде заработало.
← →
Franzy (2008-05-18 20:07) [12]Все отлично заработало, спасибо, Renegat!
← →
Franzy (2008-05-18 20:19) [13]Нет, ни фига не заработало. WaitForSingleObject не ждет конца работы программы!!!!
Вот мой код:
procedure TForm1.Button6Click(Sender: TObject);
var h:THandle;
begin
SaveProject(curproject);
h:=WinExec(PAnsiChar("gridder2D.exe "+curproject),SW_SHOWNORMAL);
WaitForSingleObject(h,INFINITE);
ShowMessage("OK");
end;
Мессадж выскакивает задолго до того (хоть и не сразу), как закончит работать консольная прога (ее окно же видно).
← →
Anatoly Podgoretsky © (2008-05-18 20:20) [14]Научись пользоваться справкой, в Дельфи даже отдельный пункт в меню есть по SDK
← →
Franzy (2008-05-18 20:24) [15]А, я-то думал там общая помощь по всему... Тупо набираю где-нибудь в коде команду и жму F1. Теперь вижу, что нужно вызывать помощь отдельно...
← →
Anatoly Podgoretsky © (2008-05-18 20:34) [16]> Franzy (18.05.2008 20:24:15) [15]
Неправильно думал, до 200х это была отдельная справка.
Ну и теперь когда ты добрался до справки, то надеюсь, что ты прочитал - что WinExec это для совместимости с Win 3.0
← →
Franzy (2008-05-18 20:40) [17]Ага, WinExec оказывается вовсе не хэндл возвращает, а номер ошибки...
Господа, я очень плохо разбираюсь в хэндлах и прочих взаимоотношениях прог с осью, мой удел - вычислительные проги. Кому не сложно, приведите, пожалуйста, необходимый мне код.
Что мне нужно:
1) запустить консольную прогу с параметром
2) продолжить выполнение программы только после того, как закончит работать консольная прога.
Запускаемая прога лежит в той же папке, что и прога-оболочка.
← →
Германн © (2008-05-18 21:40) [18]http://delphimaster.ru/cgi-bin/faq.pl?look=1&id=988621841&n=15
← →
Franzy (2008-05-18 21:42) [19]БОЛЬШОЕ СПАСИБО!
← →
Leonid Troyanovsky © (2008-05-19 18:28) [20]
> Renegat (18.05.08 19:43) [9]
> - PID процесса, то она ждёт пока он не завершит работу.
Handle.
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.06.08;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.045 c