Fórum Executar um arquivo (ShellExecute)? #221644

23/03/2004

0

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

Responder

Posts

23/03/2004

Lucas 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;




Responder

Gostei + 0

23/03/2004

Geno

[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.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar