Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
felipeee Novato

Registrado: Quarta-Feira, 21 de Outubro de 2009 Mensagens: 44
|
Enviada: Seg Ago 22, 2011 11:18 am Assunto: passar parametro para outro exe e retornar true ou false |
|
|
amigos,
vi artigos de como passar parametro par outro programa. ok. testado e aprovado.
entretanto, gostaria de ter o retorno deste parametro.
por exemplo:
1-estou "DENTRO" de um programa e chamo outro programa, atraves do shellexecute, enviando o parametro (ParamStr(1)) que é o numero 1.
2-este outro programa recebe o parametro (ParamStr(1)) e retorna true identificando numero par ou false identificando numero impar para o programa anterior.
3-o programa anterior, ou seja, que chamou o outro programa, recebe o que foi retornado, true ou false, e dá prosseguimento ao processo.
pergunta:
como fazer com que o programa que foi chamado retorne true ou false para o programa anterior?
li artigos de como enviar parametros para um programa, mas nao encontrei artigos de como receber dados processados por este programa.
isso é possível?
obrigado pela ajuda.
felipeee. |
|
Voltar ao Topo |
|
 |
Ghost_Rider Colaborador

Registrado: Segunda-Feira, 6 de Outubro de 2003 Mensagens: 4437
|
Enviada: Seg Ago 22, 2011 11:35 am Assunto: |
|
|
Desse jeito que vc esta fazendo vc não consegue "receber" de volta o parametro, o que vc poderia fazer é criar um arquivo texto com o retorno da rotina e o exe que enviou o comando ler esse arquivo e verificar o resultado. |
|
Voltar ao Topo |
|
 |
joemil Moderador

Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9100 Localização: Sinop-MT
|
Enviada: Seg Ago 22, 2011 11:51 am Assunto: |
|
|
testa isso ai:
Código: | procedure TForm1.Button1Click(Sender: TObject);
begin
ExitCode := 1; // CODIGO A SER RETORNADO
Application.Terminate;
end;
|
entretanto, se vc usar ShellExecute, nao vai conseguir saber o resultado. procure pela funcao ExecAndWait _________________ <b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/ |
|
Voltar ao Topo |
|
 |
felipeee Novato

Registrado: Quarta-Feira, 21 de Outubro de 2009 Mensagens: 44
|
Enviada: Ter Ago 23, 2011 11:14 am Assunto: |
|
|
fala cara!
nao conhecia esta função. bem legal!
mas nao entedi direito.
o ExitCode é para retornar o conteudo para o programa anterior, certo?
entao fiz:
1-dois programas: teste1.exe e teste2.exe;
2-o teste2.exe chama o teste1.exe passando um parametro paramstr(1) (saco);
3-em teste1.exe coloquei para exibir o parametro com showmessage(paramstr(1)) no onshow e coloquei dois botões:
botao1 retornando ExitCode:=0 e botao2 retornando ExitCode:=1;
procedure TForm1.FormShow(Sender: TObject);
begin
showmessage(paramstr(1));
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
ExitCode := 0; // CODIGO A SER RETORNADO
Application.Terminate;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
ExitCode := 1; // CODIGO A SER RETORNADO
Application.Terminate;
end;
4-em teste2 fiz o abaixo:
procedure TForm1.btchamaClick(Sender: TObject);
var retorno: boolean;
begin
//- Exemplo de uso:
retorno:=ExecAndWait('c:\teste\teste1.exe', 'saco', SW_SHOW);
if retorno=false then
showmessage('false')
else
showmessage('true');
end;
resultado:
1-ele sempre retorna true.
pelo que entendi retorno so exibe false se a funcao nao conseguir executar teste1.exe.
2-o parametro nao é enviado ao teste1.exe. o showmessage sempre exibe conteudo vazio.
o que posso estar fazendo de errado?
a funcao que peguei foi:
function TForm1.ExecAndWait(const FileName, Params: string; const WindowState: Word): boolean;
var
SUInfo: TStartupInfo;
ProcInfo: TProcessInformation;
CmdLine: string;
begin
{ Coloca o nome do arquivo entre aspas. Isto é necessário devido
aos espaços contidos em nomes longos }
CmdLine := '"' + Filename + '"' + Params;
FillChar(SUInfo, SizeOf(SUInfo), #0);
with SUInfo do begin
cb := SizeOf(SUInfo);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := WindowState;
end;
Result := CreateProcess(nil, PChar(CmdLine), nil, nil, false,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
PChar(ExtractFilePath(Filename)), SUInfo, ProcInfo);
{ Aguarda até ser finalizado }
if Result then begin
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
{ Libera os Handles }
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;
end;
agradeço a ajuda.
felipeee. |
|
Voltar ao Topo |
|
 |
joemil Moderador

Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9100 Localização: Sinop-MT
|
|
Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Ter Ago 23, 2011 1:21 pm Assunto: |
|
|
Para se comunicar com outra aplicação tente procurar por WM_COPYDATA que vc consegue seu objetivo.
bye _________________ P.O.W.E.R B.Y D.E.L.P.H.I |
|
Voltar ao Topo |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Ter Ago 23, 2011 4:25 pm Assunto: |
|
|
vc tem q verificar o exitcode retornado |
|
Voltar ao Topo |
|
 |
|