melhoria:

qdo for rodar o comando, use:

"COMMAND.COM /C C:\REPARAR.BAT RENAL.GDB"

o parametro /C faz com q o command feche a janela após sua conclusão.
se vc quiser deixar uma mensagem tipo "PRESSIONE QQ TECLA PARA CONTINUAR", use 
@PAUSE no seu .bat.
outra coisa: use command.com porque cmd é do win2000/xp
daí, se o cara estiver com win98, pode ter problemas.

And.

  ----- Original Message ----- 
  From: Eric D. 
  To: delphi-br@yahoogrupos.com.br 
  Sent: Monday, January 22, 2007 4:19 PM
  Subject: Re: [delphi-br] Interagir com o console


  Se eu não estiver errado, o parâmetro "Cmd" da função deve ser o seu comando 
completo, com parâmetros e tudo mais....

  []'s

  Eric D. - Desenvolvimento e Soluções de Tecnologia 
  [EMAIL PROTECTED] 
  "Talk is cheap, show me the code..." 
  ----- Original Message ----- 
  From: Marcos André 
  To: delphi-br@yahoogrupos.com.br 
  Sent: Monday, January 22, 2007 1:28 PM
  Subject: RES: [delphi-br] Interagir com o console

  Olá João, 

  Isto é exatamente o que eu precisa, só que não consegui
  enviar parâmetros: ex: 

  C:\reparar.bat renal.gdb

  É desta forma q eu executo no prompt, porém não consigo enviar o renal.gdb
  pela procedure, tow pesquisando, mas num tow encontrando como fazer...

  Tem uma idéia?

  Um Abraço

  __ __
  / \ /| |'-.
  .\__/ || | |
  _ / `._ \|_|_.-'
  | / \__.`=._) (_ Marcos André
  |/ ._/ |"""""""""| 
  |'. `\ | | Analista de Sistema 
  ;"""/ / | | Easy Corporation
  ) /_/| |.-------.| www.e-easy.com.br <http://www.e-easy.com.br/> 
  ' `-` ' " " msn: [EMAIL PROTECTED]

  Planos profissionais com qualidade.
  consulte nossos planos, click aqui <http://www.e-easy.com.br/websites.php> 

  De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
  nome de Joao Morais
  Enviada em: segunda-feira, 22 de janeiro de 2007 11:03
  Para: delphi-br@yahoogrupos.com.br
  Assunto: Re: [delphi-br] Interagir com o console

  Marcos Douglas wrote:

  > Comece com a função ShellExecuteEx da unit ShellAPI.pas
  > 
  > --
  > Marcos Douglas
  > 
  > From: Marcos André <[EMAIL PROTECTED] <mailto:marcos%40e-easy.com.br> >
  > 
  >> Olá Pessoal,
  >>
  >>
  >> Tenho uma BAT que executa alguns arquivos do Firebird para
  >> recuperação de bases, GBAK, GFIX, etc... Gostaria de fazer um programa
  que
  >> lidasse com estes arquivos, tipo enviasse comandos para o prompt e leia a
  >> resposta... alguém poderia me ajudar com um ponto de partida???

  E continue com essa aqui:
  (código retirado do Dev-Pascal)

  Cuidado com as quebras de linha.

  function ExecuteProcLog(Cmd, WorkDir: String): string;
  var
  tsi: TStartupInfo;
  tpi: TProcessInformation;
  nRead: DWORD;
  aBuf: array[0..101] of Char;
  sa: TSecurityAttributes;
  hOutputReadTmp, hOutputRead, hOutputWrite, hInputWriteTmp, hInputRead,
  hInputWrite, hErrorWrite: THandle;
  FOutput: string;
  begin
  FOutput := '';

  sa.nLength := SizeOf(TSecurityAttributes);
  sa.lpSecurityDescriptor := nil;
  sa.bInheritHandle := True;

  CreatePipe(hOutputReadTmp, hOutputWrite, @sa, 0);
  DuplicateHandle(GetCurrentProcess(), hOutputWrite, GetCurrentProcess(),
  @hErrorWrite, 0, true, DUPLICATE_SAME_ACCESS);
  CreatePipe(hInputRead, hInputWriteTmp, @sa, 0);

  // Create new output read handle and the input write handle. Set
  // the inheritance properties to FALSE. Otherwise, the child inherits
  // the these handles; resulting in non-closeable handles to the pipes
  // being created.
  DuplicateHandle(GetCurrentProcess(), hOutputReadTmp, 
  GetCurrentProcess(),
  @hOutputRead, 0, false, DUPLICATE_SAME_ACCESS);
  DuplicateHandle(GetCurrentProcess(), hInputWriteTmp, 
  GetCurrentProcess(),
  @hInputWrite, 0, false, DUPLICATE_SAME_ACCESS);
  CloseHandle(hOutputReadTmp);
  CloseHandle(hInputWriteTmp);

  FillChar(tsi, SizeOf(TStartupInfo), 0);
  tsi.cb := SizeOf(TStartupInfo);
  tsi.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
  tsi.hStdInput := hInputRead;
  tsi.hStdOutput := hOutputWrite;
  tsi.hStdError := hErrorWrite;

  CreateProcess(nil, PChar(Cmd), @sa, @sa, true, 0, nil, PChar(WorkDir),
  tsi, tpi);
  CloseHandle(hOutputWrite);
  CloseHandle(hInputRead );
  CloseHandle(hErrorWrite);
  Application.ProcessMessages;

  repeat
  if (not ReadFile(hOutputRead, aBuf, 16, nRead, nil)) or (nRead = 
  0) then
  begin
  if GetLastError = ERROR_BROKEN_PIPE then Break
  else MessageDlg('Pipe read error, could not execute file', 
  mtError, [mbOK]);
  end;
  aBuf[nRead] := #0;
  FOutput := FOutput + PChar(@aBuf[0]);
  Application.ProcessMessages;
  until False;

  Result := FOutput;
  // GetExitCodeProcess(tpi.hProcess, nRead) = True;
  end;

  --
  Joao Morais

  [As partes desta mensagem que não continham texto foram removidas]

  [As partes desta mensagem que não continham texto foram removidas]



   

  __________ Informação do NOD32 IMON 1997 (20070122) __________

  Esta mensagem foi verificada pelo NOD32 sistema antivírus
  http://www.eset.com.br


[As partes desta mensagem que não continham texto foram removidas]

Responder a