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