Страница 1 из 1
					
				Вызов внешней программы
				Добавлено: 09 авг 2005, 18:43
				 Sheinina
				Нужно из своего интерфейса выполнить некий .bat-файл. Возможно ли это, и если да, то как?
			 
			
					
				
				Добавлено: 09 авг 2005, 20:24
				 m0p3e
				19.1. Функция ExecProgram (String, String, String, Integer, Var Integer) : Integer 
Назначение 
Функция для запуска внешних программ из программ, созданных на базе системы Атлантис. Данной функцией запускаются Exe и Com файлы DOS, Win16 и Win32, а также Bat-файлы. Возможны режимы запуска с ожиданием завершения или без (параметр aRunFlags), а также с изображением текстового экрана запускаемой программы (DOS-версия). Поддерживается функция перенаправления входного и выходного потоков запускаемой программы в командной строке (параметр aParamStr). 
Описание 
function ExecProgram (aFileName, aParamStr, aTitle : String; 
aRunFlags : Integer; Var aExitCode : Integer) : Integer; 
Параметры 
Входные: 
aFileName : String - имя файла запускаемой программы. Если не задан полный путь, то запускаемая программа будет искаться в каталоге основной программы, затем в текущем каталоге и в путях DOS-переменной Path. Для Windows-версии в качестве имени запускаемой программы можно использовать слово 'Start', если в параметре aParamStr задано имя файла запускаемой программы с зарегистрированным расширением (например, "doc", "txt", "bmp" и т.д.). Зарегистрированные на данном компьютере расширения можно узнать командой "Assoc|More" или посмотреть в меню Explorer (Проводник) View|Options, закладка File Types. 
aParamStr : String - строка параметров запускаемой программы, например: '111.doc'. Строка может включать символы перенаправления ввода и вывода (символы "<" и ">"), например: 'Input.txt /c >Data.out'. 
aTitle : String - строка заголовка окна, в которое выводится экран запущенной программы (для DOS-версии). В Windows-версии эта же строка используется для визуализации запуска внешней программы. 
aRunFlags : Integer - флаги запуска программы: 
Название Константа DOS/Win Примечание 
pfSilent $8000 DOS Выполнение без вывода на экран. 
pfFullScreen $0000 DOS Выполнение на полном экране. 
pfUpScreenDiv2 $0001 DOS Выполнение на верхней половине экрана. 
pfDownScreenDiv2 $0002 DOS Выполнение на нижней половине экрана. 
pfUpScreenDiv3 $0004 DOS Выполнение на верхней трети экрана. 
pfDownScreenDiv3 $0008 DOS Выполнение на нижней трети экрана. 
pfKeepWindow $0010 DOS Сохранять окно на экране. Стирать по "пустому" вызову (при aFileName=''), что может быть полезно при запуске нескольких программ. 
pfDontRedrawScreen $0020 DOS Не перерисовывать экран при запуске программы (для программ, ничего не выводящих на экран). 
pfDontWait $1000 DOS/Win Не ждать завершения программы. 
pfWaitKey $2000 DOS После выполнения программы ждать нажатия клавиши (для программ, работающих в строчном режиме). 
pfSetHandleCount $4000 DOS Установить предельное число открытых файлов для запускаемой программы > 20. 
Выходной параметр: 
aExitCode : Integer - параметр, возвращающий код завершения программы (обычно 0 - нормальное завершение, но некоторые программы, например pkzip, имеют ненулевые успешные коды). 
Возвращаемое значение 
Функция возвращает код ошибки запуска программы: 
0 Нет ошибки 
2 Запускаемая программа не найдена 
5 Нет прав на доступ к запускаемой программе или каталогу 
8 Не хватает памяти для загрузки программы 
10 Не найдена одна из динамических библиотек запускаемой программы 
11 Запускаемый файл не является программой 
Пример 1 
Var aDosCode, aErrorCode : Integer; 
aDosCode:= ExecProgram ('Winword.exe' , 'L:\DOC\PRINT.DOC /P', 
'Печать файла', 0, aErrorCode); 
if aDosCode <> 0 then { 
Message ('Программа не запустилась !', mfError); 
} else { 
if aErrorCode <> 0 then 
Message ('Файл не напечатан !', mfError); 
} 
Пример 2 
ExecProgram (pkzip' , '-v L:\FILES\DATA.ZIP >L:\FILES\result.txt', 0, 
'Формирование списка файлов в архиве', $2000, aErrorCode);
			 
			
					
				
				Добавлено: 10 авг 2005, 11:20
				 Sheinina
				Спасибо. Буду разбираться.
			 
			
					
				
				Добавлено: 10 авг 2005, 13:57
				 Sheinina
				Получилось:) Спасибо еще раз.