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
- TMainMenu: Criando menus em Delphi:
Aprenda a criar um menu principal para suas aplicações Delphi utilizando o TMainMenu. - Vue.js: Como criar sua primeira aplicação:
Neste curso você aprenderá a criar sua primeira aplicação com Vue.js, um dos principais frameworks JavaScript do mercado atualmente. - Navegação entre telas no Cordova:
Aprenda como é feita a navegação entre páginas em uma aplicação mobile desenvolvida com o Cordova.
Colabore com nosso Fórum ;)
- Try Except com Shell Execute:
Estou dentando fazer um tratamento com try except para que caso ele não consiga abrir o WORD o sistema informe uma mensagem de erro porem nao dá certo, o codigo esta assim: - ShellExecute não está funcionando:
Olá, sei que tenho que por alguma Unit na declaração para usar o ShellExecute, porém não me lembro qual... qual seria???? - ShellExecute(handle, 'CLOSE', PChar('C:\WINDOWS\system32\cmd.exe'), '', '', SW_SHOWNORMAL);:
Olá, Abri uma janela pelo cmd e preciso fechala como faço? Dei uma pesquisada na net mas sem sucesso. ShellExecute(handle, 'CLOSE', PChar('C:\WINDOWS\system32\cmd.exe'), '', '', SW_SHOWNORMAL);