Buenas:
Se trata de ejecutar desde delphi un programa de MS-DOS que pide cierta entrada desde teclado.
Para automatizar esto redirijo la entrada con un fichero texto.
El programa ms-dos se llama: execufsm
El fichero de texto a redirigir se llama: in0.txt
in0.txt contiene dos nombres de ficheros con comillas simples:
'cu0.txt'
'cu0.out'
Desde la consola de ms-dos tecleo:
execufsm < in0.txt
y funciona perfectamente.
El problema esta en delphi que no me ejecuta el proceso siguiente:
Código Delphi
[-]
var sc,sp: string;
SUInfo: TStartupInfo;
ProcInfo: TProcessInformation;
tmpcard: cardinal;
F1: TextFile;
begin
ChDir(ExtractFileDir(paramStr(0)));
AssignFile(F1,'in0.txt');
Rewrite(F1);
writeln(F1,'''cu0.txt''');
writeln(F1,'''cu0.out''');
CloseFile(F1);
sc := 'execufsm.exe < in0.txt';
sp := ExtractFilePath(ExtractFileDir(paramStr(0))+'\execufsm.exe');
fillchar(SuInfo, sizeof(suinfo),#0);
fillchar(ProcInfo, sizeof(procinfo),#0);
SuInfo.cb := Sizeof(SuInfo);
SUInfo.dwFlags := STARTF_USESHOWWINDOW;
SUInfo.wShowWindow := SW_HIDE; SUInfo.wShowWindow := SW_SHOW;
if not createprocess(nil,
pchar(sc),
nil,
nil,FALSE,
CREATE_NEW_CONSOLE or
NORMAL_PRIORITY_CLASS,
nil,
pChar(sp),
SUInfo,
ProcInfo) then
begin
ShowMessage('FAIL');
Exit;
end;
repeat
Application.ProcessMessages;
if GetExitCodeProcess(ProcInfo.hProcess, tmpcard) then
begin
if tmpCard = 0 then Break;
end;
until False or Application.Terminated;
if TerminateProcess(ProcInfo.hProcess, tmpCard) then
fillchar(ProcInfo, Sizeof(Procinfo),#0);
Se abre el programa pero se queda a la espera de introducir el texto con el teclado. Es decir no redirige la entrada de teclado.
El fichero que uso desde la consola es el que creo desde delphi y desde la consola funciona perfectamente...
Un saludo