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]

Responder a