Passar parâmetros para outro executável com o WinExec

Delphi

27/01/2008

Como passar parâmetros para outro executável, utilizando o WinExec e os parâmetros carregados em variáveis?

Fiz assim:

Tenho uma data na Edit1. (Por exemplo: 26/01/2008)
Carreguei a variável DataPr assim:

[b:f6b92b5b2a]DataPr := DateToStr(Edit1.Text);[/b:f6b92b5b2a]

[b:f6b92b5b2a]DataPr[/b:f6b92b5b2a] está definida como [b:f6b92b5b2a]string[/b:f6b92b5b2a]

Coloquei o seguinte comando:

[b:f6b92b5b2a]WinExec(´c:\teste\lista.exe DataPr´, Sw_ShowNormal);[/b:f6b92b5b2a]

E quando o lista.exe é executado, o parâmetro foi com o nome da variável (DataPr) e não com o conteúdo dela.

Fiz a checagem e o parâmetro aparece como DataPr, quando deveria ser 26/01/2008.

Falta algo?

Agradeço.


Cps.art

Cps.art

Curtidas 0

Respostas

Asales

Asales

27/01/2008

Verifique se isto resolve o problema:

WinExec(´c:\teste\lista.exe [b:a7c59a2e35]´+DataPr[/b:a7c59a2e35], Sw_ShowNormal);


GOSTEI 0
Cps.art

Cps.art

27/01/2008

Olá [b:019c7951aa]asales[/b:019c7951aa].

Aí dá o seguinte erro:

[b:019c7951aa][Error] Unit1.pas(44): Incompatible types: ´String´ and ´PChar´[/b:019c7951aa]

Valeu.


GOSTEI 0
Marcelo.mileris

Marcelo.mileris

27/01/2008

WinExec([b:b35bde6550]PChar([/b:b35bde6550]´c:\teste\lista.exe ´+DataPr[b:b35bde6550])[/b:b35bde6550], Sw_ShowNormal);


GOSTEI 0
Cps.art

Cps.art

27/01/2008

Valeu [b:aba63f3ac5]marcelo.mileris[/b:aba63f3ac5]

Funcionou.

Brigadão!!!!!!!!!!!!!!


GOSTEI 0
Cps.art

Cps.art

27/01/2008

Olá pessoal.

Deixa eu explicar o que fiz e se dá pra fazer o que estou pensando.

Pelo que viram acima, executo uma rotina em Clipper, a partir de uma linha de comando do Delphi.
Passo parâmetros para a rotina do Clipper e funcionou bem.
É claro que enquanto a rotina do Clipper é executada, meu aplicativo em Delphi continua aberto.
Como a rotina em Clipper fui eu mesmo que montei, adaptei para receber os parâmetros, então minha questão é se dá pra adaptar essa rotina em clipper, para que quando fechada possa retornar parâmetros para o aplicativo em Delphi, ou seja, disponibilizar dados que eu possa carregar variáveis no delphi.

Tá ai o desafio para meus amigos delphianos.

Abração.


GOSTEI 0
Cps.art

Cps.art

27/01/2008

Alguem tem alguma dica?????


GOSTEI 0
Asales

Asales

27/01/2008

Não sei o funcionamento do Clipper mas será que ao finalizar a rotina você poderia gravar os parâmetros num arquivo texto que seria lido pelo Delphi.


GOSTEI 0
Cps.art

Cps.art

27/01/2008

Olá asales.

Acho até que poderia sim.
No caso, se eu tivesse que passar 2 parâmetros para o Delphi, no arquivo texto que o clipper vai gerar, esses parâmetros devem estar 1 em cada linha do texto ou os 2 na mesma linha, separados por alguma coisa tipo, espaço, virgula, etc.. ?

Vou fazer um teste aqui.

Obrigado por enquanto.


GOSTEI 0
Robsonpassos

Robsonpassos

27/01/2008

Caros colegas,

O aplicativo criado em Delphi pode receber parametros de linha de comando tranquilamente. Basta passa-los um apos o outro, e atentar para fazer o devido tratamento de cada um dentro do aplicativo.

Ex: C:\AppDelphi.exe Param1 Param2 Param3 Param4 ParamN

A funcao ParamStr(N) retorna um parametro passado na linha de comando.

Ex: ParN := ParamStr(2); // retorna o parametro Param2
ParN := ParamStr(5); // retorna o parametro ParamN

Para pegar a lista de todos os parametros usa a variavel ParamCount, segue exemplo de uso.

procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
for i := 1 to ParamCount do
begin
if LowerCase(ParamStr(i)) = ´beep´ then
Beep
else if LowerCase(ParamStr(i)) = ´exit´ then
Application.Terminate;
end;
end;

Neste caso o sistema aceita e faz o tratamento de dois parametros ´beep´ ou ´exit´, soando um apito ou saindo do aplicativo.

Grande abraço.

robson@rcomps.com


GOSTEI 0
Cps.art

Cps.art

27/01/2008

Olá RobsonPassos.

O procedimento que você descreveu é correto e funciona.
Executar um aplicativo (aplic.exe) em clipper funciona da mesma maneira, desde - é claro - que esse aplicativo esteja preparado para receber e tratar esses parâmetros, assim como em delphi.

O meu problema é um pouco mais complicado.
Eu executo um aplicativo em delphi, com ou sem parâmetros, que no caso não tem importância, e a partir desse aplicativo, numa certa linha, eu executo uma rotina em clipper, passando parâmetros gerados pelo delphi, sem fechar o aplicativo original em delphi.
Essa rotina em clipper gera e carrega uma variável (que nessas alturas não sei se se pode chamar de parâmetro), e quando ela se encerra (a rotina em clipper) e o controle volta para o aplicativo delphi (que ficou aberto), queria saber se é possível ´aproveitar´ o conteúdo dessa variável no delphi.
Como pode ter percebido, a rotina em clipper não ´abre´ novamente a rotina em delphi passando parâmetros como no seu exemplo(appdelphi.exe Param1 Param2), simplesmente retorna ao aplicativo delphi na linha seguinte a da chamada da rotina em clipper.

[b:f109793996]Por exemplo[/b:f109793996]: (meio imbecil mas serve para ilustrar)

[i:f109793996][b:f109793996]Você tem 2 calculadoras.
Uma SÓSOMA, a outra SÓSUBTRAI.
Você está usando a que SÓSOMA, mas num dado momento precisa fazer uma subtração.
Você deixa a que SÓSOMA ligada, liga a que SÓSUBTRAI, faz a operação de subtração, ´carrega na memória´ o resultado, desliga essa calculadora, volta à que SÓSOMA (que ficou ligada) e insere esse resultado nela e continua somando, até surgir a necessidade de se repetir a operação[/b:f109793996].[/i:f109793996]

É isso aí.

Agradeço pela colaboração


GOSTEI 0
POSTAR