Executar um arquivo (ShellExecute)?

Delphi

23/03/2004

Pessoal como eu consigo saber se meu comando ShellExecute abriu ou nao o meu arquivo
por exemplo:
Eu estou abrindo um arquivo pdf desta maneira:

ShellExecute(Application.Handle, nil, PChar(´arquivo.pdf´), nil, nil, SW_SHOWMAXIMIZED);

Funciona perfeito, mas se não estiver instalado o Acrobat Reader não executa, isso é logico
então gostaria de dar uma menssagem para o usuário instalar o Acrobat Reader.

Como fazer isto ? O ShellExecute tem um retorno ?

Obrigado!!!


Estudante

Estudante

Curtidas 0

Respostas

Lucas Silva

Lucas Silva

23/03/2004

Tenta esse código ai, não sei se da certo!

try
 ShellExecute(Application.Handle, nil, PChar(´arquivo.pdf´), nil, nil, SW_SHOWMAXIMIZED); 
except SHowMessage(´Esse programa não está instalado´);
end;




GOSTEI 0
Geno

Geno

23/03/2004

[quote:4078447253=´Lucas Alves Silva´]Tenta esse código ai, não sei se da certo!

try
 ShellExecute(Application.Handle, nil, PChar(´arquivo.pdf´), nil, nil, SW_SHOWMAXIMIZED); 
except SHowMessage(´Esse programa não está instalado´);
end;

[/quote:4078447253]

Nao...nao funciona. Pq a excecao nao eh gerada pelo delphi, e sim pela API do windows, ao qual o shellexecute faz a chamada.

Portanto a resposta da FUNCAO ShellExecute eh que vai determinar se o arquivo foi aberto ou nao com sucesso.

A funcao retorna um cardinal
Os resultados que conheco sao esses aki:

2 -> arquivo nao existe
31 -> nao existe um programa acossiado a extensao desse arquivo
42 -> Abriu com sucesso.


Assim, sugiro que vc utilize o seguinte codigo:

if ShellExecute(Application.Handle, ´open´, PChar´arquivo.pdf´), nil, nil, SW_SHOWMAXIMIZED) <> 42 then
ShowMessage(´O arquivo não pode ser aberto!´);


Ou entao vc teclara uma variavel cardinal que recebe o shellexecute:

var
teste: cardinal;
begin
teste := ShellExecute(Application.Handle, ´open´, PChar´arquivo.pdf´),
nil, nil, SW_SHOWMAXIMIZED);
if teste = 2 then
ShowMessage(´O arquivo não existe´)
else
if teste = 31 then
ShowMessage(´O Acrobat Reader nao foi instalado´);



Acredito que isso sirva.
Espero ter ajudado.


GOSTEI 0
POSTAR