Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-12-2008
JF Sebastian JF Sebastian is offline
Miembro
 
Registrado: oct 2006
Posts: 108
Poder: 18
JF Sebastian Va por buen camino
Ejecutar programa DOS con redireccion de entrada

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; //SW_SHOW;
  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

Última edición por JF Sebastian fecha: 15-12-2008 a las 20:01:30.
Responder Con Cita
  #2  
Antiguo 15-12-2008
JF Sebastian JF Sebastian is offline
Miembro
 
Registrado: oct 2006
Posts: 108
Poder: 18
JF Sebastian Va por buen camino
Juan palomo, yo me lo guiso, yo me lo como ...

http://members.aye.net/~bstowers/del...les/redir.html
Responder Con Cita
  #3  
Antiguo 26-12-2008
Archer Archer is offline
Miembro
 
Registrado: sep 2005
Ubicación: Valencia
Posts: 28
Poder: 0
Archer Va por buen camino
Algo parecido intente yo, solo que tambien redirigia la salida a un TMemo, funcionar funciono, pero con algunos 'peros' que nadie me ayudo a solucionar... hoy he estado repasandolo porque me vuelve a hacer falta y la dichosa linea del Peek sigue dando problemas, pero bueno, si le quieres pegar un vistazo...

http://www.clubdelphi.com/foros/showthread.php?t=25658

Saludos.

PD: Los problemas me los da si depuro (F7) o si ejecuto un "chkdsk.exe /f" sobre alguna unidad FAT bloqueada... curioso.
Responder Con Cita
  #4  
Antiguo 26-12-2008
Archer Archer is offline
Miembro
 
Registrado: sep 2005
Ubicación: Valencia
Posts: 28
Poder: 0
Archer Va por buen camino
De todas formas me he bajado la informacion que hay en la pagina web que indicas e igual me ayuda con lo mio, luego le pego un vistazo. Gracias.
Responder Con Cita
  #5  
Antiguo 27-12-2008
JF Sebastian JF Sebastian is offline
Miembro
 
Registrado: oct 2006
Posts: 108
Poder: 18
JF Sebastian Va por buen camino
A mi el codigo de la web que te indico me funciona perfectamente. Es mas, lo he modificado para que mientras se ejecuta la aplicacion DOS lea mediante polling el fichero de salida y asi actualizar un progressbar con Application.ProcessMessages en lugar de WaitforSingleObject.
He tenido que cambiar el modo de apertura del fichero de texto ya que con reset no se puede por estar abierto en escritura.

Ya me contaras que tal te ha ido...
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
ayuda con redireccion... foetus PHP 2 30-11-2007 20:06:36
sobre una redirección Imanol HTML, Javascript y otros 1 30-10-2007 20:22:52
Descargar archivo con redirección voci Internet 4 09-04-2007 14:22:27
Ejecutar un programa externo desde un programa de Delphi Roger_Fernandez Varios 3 02-09-2004 18:05:36
Ejecutar un programa DENTRO de otro programa seduerey Varios 8 12-11-2003 13:56:20


La franja horaria es GMT +2. Ahora son las 08:38:20.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi