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]