Fonte: www.activedelphi.com.br
Aqui vai uma dica para adicionar um item ao menu de contexto do Windows Explorer, exibido ao clicarmos com o botão direito do mouse sobre uma pasta.
Quando o usuário clica com o botão direito sobre uma pasta no Windows Explorer (ou em um componente TShellTreeView) um menu de contexto é exibido. Entre os itens padrões é possível adicionar um para a sua própria aplicação. Quando o usuário clicar neste seu item, o programa será iniciado e o caminho daquele diretório será passado como parâmetro.
A procedure a seguir adiciona uma entrada no registro do Windows para "registrar o programa" como um comando válido no menu de contexto:
procedure EnsureShellFolderPopupItem(const itemName: string);
begin
with TRegistry.Create do
try
RootKey := HKEY_CLASSES_ROOT;
if OpenKey('Directory\shell', true) then
begin
if OpenKey(itemName+'\command', true) then
WriteString('', '"'+Application.ExeName+'" "%1"');
end;
finally
Free;
end;
end;
Este código fará a adição de uma chave na seguinte forma:
HKEY_CLASSES_ROOT\Directory\shell\itemName
Onde itemName será passado por parâmetro à função (vide código abaixo) e que na verdade será o texto de exibição no menu de contexto. Seu valor será o caminho do programa e o %1, para indicar que a pasta clicada será enviada por parâmetro à aplicação:
;@="c:\...\Project1.exe" "%1" - Onde "c:\...\Project1.exe" é o local do seu executável.
Agora no evento onCreate do Form, façamos:
procedure TForm1.FormCreate(Sender: TObject);
begin
//certifica que nosso item está no menu de contexto de diretórios
//não é necessário chamar sempre, mas para testes está ok!
EnsureShellFolderPopupItem('Processar com Meu Programa');
//exibe qual a pasta que foi selecionada para processamento
if ParamCount > 0 then
ShowMessage('Pasta selecionada: ' + ParamStr(1))
else
ShowMessage('Sistema iniciado diretamente');
end;
Para testar, rode o programa pelo Delphi para que seja processada a procedure EnsureShellFolderPopupItem. Você receberá a mensagem "Sistema iniciado diretamente". Em seguida, feche o programa e clique com o botão direito sobre qualquer diretório no seu computador.
Quando o usuário clica com o botão direito sobre uma pasta no Windows Explorer (ou em um componente TShellTreeView) um menu de contexto é exibido. Entre os itens padrões é possível adicionar um para a sua própria aplicação. Quando o usuário clicar neste seu item, o programa será iniciado e o caminho daquele diretório será passado como parâmetro.
A procedure a seguir adiciona uma entrada no registro do Windows para "registrar o programa" como um comando válido no menu de contexto:
procedure EnsureShellFolderPopupItem(const itemName: string);
begin
with TRegistry.Create do
try
RootKey := HKEY_CLASSES_ROOT;
if OpenKey('Directory\shell', true) then
begin
if OpenKey(itemName+'\command', true) then
WriteString('', '"'+Application.ExeName+'" "%1"');
end;
finally
Free;
end;
end;
Este código fará a adição de uma chave na seguinte forma:
HKEY_CLASSES_ROOT\Directory\shell\itemName
Onde itemName será passado por parâmetro à função (vide código abaixo) e que na verdade será o texto de exibição no menu de contexto. Seu valor será o caminho do programa e o %1, para indicar que a pasta clicada será enviada por parâmetro à aplicação:
;@="c:\...\Project1.exe" "%1" - Onde "c:\...\Project1.exe" é o local do seu executável.
Agora no evento onCreate do Form, façamos:
procedure TForm1.FormCreate(Sender: TObject);
begin
//certifica que nosso item está no menu de contexto de diretórios
//não é necessário chamar sempre, mas para testes está ok!
EnsureShellFolderPopupItem('Processar com Meu Programa');
//exibe qual a pasta que foi selecionada para processamento
if ParamCount > 0 then
ShowMessage('Pasta selecionada: ' + ParamStr(1))
else
ShowMessage('Sistema iniciado diretamente');
end;
Para testar, rode o programa pelo Delphi para que seja processada a procedure EnsureShellFolderPopupItem. Você receberá a mensagem "Sistema iniciado diretamente". Em seguida, feche o programa e clique com o botão direito sobre qualquer diretório no seu computador.
Nenhum comentário:
Postar um comentário