Executar um arquivo (ShellExecute)?
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!!!
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
Curtidas 0
Respostas
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
23/03/2004
[quote:4078447253=´Lucas Alves Silva´]Tenta esse código ai, não sei se da certo!
[/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.
try ShellExecute(Application.Handle, nil, PChar(´arquivo.pdf´), nil, nil, SW_SHOWMAXIMIZED); except SHowMessage(´Esse programa não está instalado´); end;
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