Usando ShellExecute para executar aplicativos externos

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (10)  (0)

Neste artigo vamos sobre como usar ShellExecute para executar Aplicativos Externos, pois muitas vezes precisamos interagir com ferramentas externas.

Introdução ao ShellExecute

Nas nossas aplicações comerciais muitas vezes precisamos interagir com ferramentas externas, o que nos leva a buscar funções do Delphi como WinExec, a mais conhecida, mas que também só é utilizada por compatibilidade.

Iremos verificar nesta dica como utilizar o ShellExecute, funcionalidade da API do Windows, para executar aplicativos externos. Também iremos verificar que podemos enviar arquivos diretamente para a impressora e abrir pastas do WindowsExplorer com este comando.

A função ShellExecute funciona como o menu Executar do Windows, e este é o seu melhor benefício de uso. Se colocamos ali um path de internet, o sistema abre o Navegador padrão, se colocamos um caminho de um arquivo .doc, o sistema vai abrir o WordPad ou outro software associado para abrir documentos MS-Word. Se colocamos um caminho, o sistema abre uma janela do explorer posicionado no caminho requisitado.

A estrutura do Comando ShellExecute

O comando ShellExecute tem a seguinte assinatura:

function ShellExecute(hWnd: HWND; Operation, FileName, Parameters, Directory: PChar; ShowCmd: Integer): HINST;

Onde:

  • hWnd
    Handle da Janela que está executando o Comando.
  • Operation
    Tipo de operação que se quer executar. Pode ser 'open', 'print' ou 'explorer'.
  • FileName
    O arquivo que se quer abrir.
  • Parameters
    Parâmetros a serem passados para o FileName que vai ser aberto. Este parâmetro é útil no caso de se passar no FileName o caminho de um executável.
  • Directory
    O diretório onde a aplicação deve executar.
  • ShowCmd
    indica o tipo de janela que deve ser aberta. Podemos utilizar por exemplo SW_HIDE (deixa a janela invisível), SW_MAXIMIZE (janela maximizada), SW_MINIMIZE (janela minimizada), SW_SHOWNORMAL (abre a janela restaurada e ativa).
  • Retorno
    A função possui erro quando o retorno é menor ou igual a 32. Exemplos de erros que podem ser testados são ERROR_FILE_NOT_FOUND (arquivo não encontrado), ERROR_PATH_NOT_FOUND (caminho não encontrado), SE_ERR_ACCESSDENIED (o programa não tem direito para acessar o arquivo/programa requisitado), SE_ERR_ASSOCINCOMPLETE (arquivo requisitado não possui associação definida), SE_ERR_SHARE (Violação de Compartilhamento), entre outros erros que podem ser mapeados.

Exemplos com ShellExecute

Vamos verificar alguns exemplos de comandos que podem ser executados com o ShellExecute. Vamos utilizar o arquivo "c:\clubedelphi\teste.doc" como exemplo para os nossos estudos. Você consegue simular a ação de open e explorer acessando o menu "Run" ou "Executar" do Windows.

Abrir o arquivo com o programa associado:

edArquivo.Text := 'c:\clubedelphi\teste.doc';

ShellExecute(handle,'open',PChar(edArquivo.Text), '','',SW_SHOWNORMAL);

Imprimindo o arquivo:

edArquivo.Text := 'c:\clubedelphi\teste.doc';

ShellExecute(handle,'print',PChar(edArquivo.Text), '','',SW_SHOWNORMAL);

Abrindo a pasta 'c:\clubedelphi' e colocando a janela em modo Maximizada:

edArquivo.Text := 'c:\clubedelphi\';

ShellExecute(handle,'explore',PChar(edArquivo.Text), '','',SW_SHOWMAXIMIZED);

Criando uma nova mensagem com o cliente de email padrão definindo para quem vai a mensagem (dwildt@dug-rs.org), definido cópia (dug-rs@dug-rs.org), assunto (Assunto do email) e corpo da mensagem (Texto da Mensagem):

edArquivo.Text := 'mailto:dwildt@dug-rs.org?cc=dug-rs@dug-rs.org&subject=Assunto do email&body=Texto da Mensagem';

ShellExecute(handle,'open',PChar(edArquivo.Text), '','',SW_SHOWNORMAL);

Abrindo um web site com o navegador padrão:

edArquivo.Text := 'http://www.clubedelphi.net';

ShellExecute(handle,'open',PChar(edArquivo.Text), '','',SW_SHOWNORMAL)

Conclusões

Com esta dica verificamos como trabalhar com a função ShellExecute.

Links Úteis

Colabore com nosso Fórum ;)

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?