From: roma@mark-nv.izhmark.udmurtia.su (Roma Dimov)
Organization: Communication Company MARK ITT, машина в углу
andy@hq.icc.tsaritsyn.su спрашивал:
> Мужики, help me, please!
>
>procedure MyApp.RunExtApp;
>begin
> DoneSysError;
> DoneEvents;
> DoneVideo;
> DoneDosMem;
> SwapVectors;
> Exec('ExtApp.exe', '-t123 -p3 < command.lst')
> ^^^^^^^^^^^^^^
> SwapVectors;
> InitDosMem;
> InitVideo;
> InitEvents;
> InitSysError;
> Redraw;
>end;
>
> В чем пpоблема: После запуска ExtApp.exe, последняя упоpно не
>хочет бpать данные из command.lst, а ожидает ввод с клавиатуpы :(
>Как сделать пеpеназначение, что бы ввод шел не с клавы, а с файла ?
>
> Заpанее, THX!
>
> С уважением, Andy.
Вот так работает:
{> Cut here. FileName= DOSEXEC.PAS }
Procedure tmyapp.dosexec (command: String);
Var buf: pointer;
aa: Array [0..12] Of Char;
reg: Registers;
i, j: Word;
Function force_dup (existing, second: Word): Boolean;
Begin
reg. AH := $46;
reg. BX := existing;
reg. CX := second;
MsDos (reg);
If (reg. Flags And fCarry) <> 0 Then
force_dup := False
Else force_dup := True;
End;
Begin
DoneSysError;
DoneEvents;
DoneVideo;
DoneDosMem;
WriteLn;
StrPCopy (aa, TmpDir+TmpFileName);
reg. AH := $3D;
reg. AL := 0;
reg. DS := Seg (aa);
reg. DX := Ofs (aa);
MsDos (reg);
j := reg. AX;
reg. BX := 0;
reg. AH := $45;
MsDos (reg);
i := reg. AX;
If force_dup (j, 0) Then Begin
SwapVectors;
Exec (sendmail, command);
SwapVectors;
force_dup (i, 0);
reg. BX := j;
reg. AH := $3e;
MsDos (reg);
reg. BX := i;
reg. AH := $3e;
MsDos (reg);
End;
InitDosMem;
InitVideo;
InitEvents;
InitSysError;
Redraw;
If DosError <> 0 Then Begin { Error? }
Str (DosError, command);
MessageBox (^C + 'Dos error #' + command ,
Nil, mfInformation + mfOKButton);
End
Else Begin
Str (DosExitCode, command);
MessageBox (^C + 'Exec successful.' + #13 + ^c'Child process
exit code = ' + command, Nil, mfInformation + mfOKButton);
End;
End;
|