Você está na página 1de 10

8/10/2014 Usando ShellExecute para executar aplicativos externos

Buscar

download comentários post favorito (4)

Usando ShellExecute para


executar aplicativos externos
Usando ShellExecute para executar aplicativos externos,
neste artigo de Daniel Wildt. Acesso exclusivo para
Assinantes.

10 1 Curtir 2

Gostei (5) (0)

Introdução

http://www.devmedia.com.br/usando-shellexecute-para-executar-aplicativos-externos/613 1/10
8/10/2014 Usando ShellExecute para executar aplicativos externos

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.clubedelphi.net, 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

DEVMEDIA LOGIN
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

http://www.devmedia.com.br/usando-shellexecute-para-executar-aplicativos-externos/613 2/10
8/10/2014 Usando ShellExecute para executar aplicativos externos

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\';

http://www.devmedia.com.br/usando-shellexecute-para-executar-aplicativos-externos/613 3/10
8/10/2014 Usando ShellExecute para executar aplicativos externos

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. Veja o exemplo para

download 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!

Daniel De Freitas Wildt

Daniel Wildt é um Desenvolvedor de Software com 11 anos de experiência professional, atuando em uma
empresa global com projetos de software. Certificado e expert em Java, Delphi, tecnologias .NET e agora
andando pelo mundo do Ruby [...]

http://www.devmedia.com.br/usando-shellexecute-para-executar-aplicativos-externos/613 4/10
8/10/2014 Usando ShellExecute para executar aplicativos externos

O que você achou deste post?

Gostei (5) (0)

Comentário | Tire sua dúvida

Luiz Amável
Estou tentanto executar em Delphi 7 tanto o WinExec como o ShellExecute para executar um
arquivo .bat, mas quando tento é aberta uma nova instância do programa junto com uma janela
do DOS, sendo que a janela DOS fica travada e não executa o conteúdo do arquivo. Ao clicar em
um button ele executa um ou outro comando: shellexecute (handle, ''''open'''', ''''arquivo.bat'''',
'''''''', nil, sw_shownormal); WinExec(''''arquivo.bat'''',sw_show)

[há +1 ano] - Responder

Ztw Tecnologia
excelente dica, só faltou mencionar que é necessário incluir a Shellapi nos Uses.

[há +1 ano] - Responder

Vinícius

Olá...

Estes códigos do shellexecute funcionam para delphi 7?

Principalmente o de imprimir arquivos!

abraços!

[há +1 ano] - Responder

Wittor Sousa Lima


unit teste;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ShellAPI;

type
TForm1 = class(TForm)

http://www.devmedia.com.br/usando-shellexecute-para-executar-aplicativos-externos/613 5/10
8/10/2014 Usando ShellExecute para executar aplicativos externos

procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

private
{ Private declarations }

public
{ Public declarations }

end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;


Shift: TShiftState);
begin
if (key = VK_f1) then
// aqui vc informa o caminho que está seu help.
ShellExecute(handle,'open',PChar('C:Ajuda SGE\Ajuda SGE.chm'),
'','',SW_SHOWMAXIMIZED)
else
ShowMessage('Arquivo de ajuda não encontrado');
end;

end.

[há +1 ano] - Responder

Micaela Diniz
Oi alguem pode me ajudar? Usei esse mesmo comando
'ShellExecute(handle,'explore',PChar(edArquivo.Text), '','',SW_SHOWMAXIMIZED);' só que criei
uma variável do tipo String e dentro dela coloquei o diretório de um arquivo usado no
SaveDialog, o código ficou assim

x := DataModule.SaveDialog.FileName; ShellExecute(handle,'explore',PChar(x),
'','',SW_SHOWMAXIMIZED);

Ele trás o diretório completo mas simplesmente não faz nada quando passa pelo comando.
Alguém tem alguma solução para o caso?

[há +1 mês] - Responder

Douglas Claudio
Olá Micaela, obrigado pelo seu comentário.

http://www.devmedia.com.br/usando-shellexecute-para-executar-aplicativos-externos/613 6/10
8/10/2014 Usando ShellExecute para executar aplicativos externos

Enviamos sua solicitação ao Daniel e estamos no aguardo de um feedback do mesmo.

Um abraço.

[há +1 mês] - Responder

Daniel Sobrinho Laporte


Olá Micaela,

Qual versão do Delphi você está utilizando? Já tentou trocar o PChar por PAnsiChar?

Abraços,

Daniel

[há +1 mês] - Responder

Publicidade

Serviços

Inclua um comentário

Adicionar aos Favoritos

Marcar como lido/assistido

Incluir anotação pessoal


http://www.devmedia.com.br/usando-shellexecute-para-executar-aplicativos-externos/613 7/10
8/10/2014 Usando ShellExecute para executar aplicativos externos

+Delphi

Mais posts
Curso Online

Curso Completo de Delphi com FireDac

Video aula

Executando Consultas - Curso Completo de FireDac - Aula 5

Video aula

Conectando um BD - Curso Completo de FireDac - Aula 4

Video aula

FDExplorer e DataExplorer - Curso Completo de FireDac - Aula


3

Video aula

Introdução ao FireDac - Curso Completo de FireDac - Aula 2

Video aula

Introdução - Curso Completo de FireDac - Aula 1

Revista

Revista ClubeDelphi 160

http://www.devmedia.com.br/usando-shellexecute-para-executar-aplicativos-externos/613 8/10
8/10/2014 Usando ShellExecute para executar aplicativos externos

Pocket Video

Design Patterns: Soluções para Problemas em Projetos


Orientado a Objetos

Video aula

Stored Procedures e IAppServer - Curso de Multicamadas


com Delphi e DataSnap - 72

Video aula

Usando Stored Procedures - Curso de Multicamadas com


Delphi e DataSnap - 71

Listar mais conteúdo

Anuncie | Loja | Publique | Assine | Fale conosco

DevMedia
Curtir

33.788 pessoas curtiram DevMedia.

Plug-in social do Facebook

Hospedagem web por Porta 80 Web Hosting


http://www.devmedia.com.br/usando-shellexecute-para-executar-aplicativos-externos/613 9/10
8/10/2014 Usando ShellExecute para executar aplicativos externos

Todos os Direitos Reservados a Web-03

http://www.devmedia.com.br/usando-shellexecute-para-executar-aplicativos-externos/613 10/10

Você também pode gostar