Buscar

Usando ShellExecute para executar aplicativos externos

Código

Introdução

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, como http://www.planetadelphi.com.br, 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

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:clubedelphiteste.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:clubedelphiteste.doc';
ShellExecute(handle,'open',PChar(edArquivo.Text), '','',SW_SHOWNORMAL);
 
Imprimindo o arquivo:
edArquivo.Text := 'c:clubedelphiteste.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:wedsonregis@dgm.com?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, que permite que você selecione arquivos e execute as operações de open, print e execute com eles.
Por hoje era isto pessoal. Até a próxima!

Publicidade

Vote na dica




Quantidade de votos: 1 voto
Aceitação: 20%


Detalhes da dica

Categoria: Windows
Adicionada dia: 16/03/10
Por: Wedson
Visualizada: 13236 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009