Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.043 c
8-1181893421
BlackCat
2007-06-15 11:43
2008.06.08
Проигрывание AVI файла с выводом на плату ввода /вывода


4-1190366220
Stup_ID
2007-09-21 13:17
2008.06.08
ListView (Report) - перевести в режим редактирования


2-1210671008
Виктор
2008-05-13 13:30
2008.06.08
Помогите найти ошибку в коде


4-1175250154
balepa
2007-03-30 14:22
2008.06.08
WaitCommEvent (EV_TXEMPTY)


2-1210756124
WebSQLNeederr
2008-05-14 13:08
2008.06.08
Как сделать что бы можно было копировать ячейки СтригГрида?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский