9 de abril de 2009

Criando um applet para o Painel de Controle do Windows

Há certas ocasiões, quando construímos uma aplicação em qualquer linguagem, em que é interessante disponibilizarmos uma forma do usuário configurar tal aplicação através do método padrão do Windows : acessando um ícone no Painel de Controle.

Um exemplo é quando temos um Serviço no Windows. Como serviços não têm interface com o usuário, a melhor solução é permitir a configuração através do Painel de Controle.

Recentemente, tive que montar um Serviço usando Visual Studio e C#. Serviços no VS2008 são fáceis de montar : há um template. Mas não encontrei nenhum modelo de como montar um applet para o Painel de Controle nessa ferramenta. No C++ Builder da Borland, é criado um projeto de DLL cuja função de entrada (Entry Point) tem a seguinte assinatura :

__stdcall int CPlApplet(unsigned hwndCPl, unsigned uMsg, int lParam1, int lParam2);

E toda a tralha associada ao funcionamento do applet vai ai dentro.

Pesquisando no site da Microsoft sobre como criar isso no Visual Studio, me deparei com uma solução que me pareceu bem mais simples e completa. Mais simples porque envolve criar um executável normal, combinado com a criação de entradas no registry para configurar como o applet deve funcionar. E mais completa porque permite criar configurações mais apropriadas para o Painel de Controle no Windows Vista.

Mãos à obra com um exemplo básico :
1) Crie um executável qualquer com interface gráfica, usando a ferramenta de desenvolvimento que você preferir. No meu exemplo, criei como C++ Builder uma aplicação com o nome CONFIG.EXE

2) Crie um GUID para identificar de forma única a sua aplicação. A Microsoft distribui junto com o Visual Studio uma ferramenta para isso : GUIDGen.exe. Para meu exemplo, usei o seguinte GUID : {5E86074E-1E92-4915-B7F8-4531F8DEAD94}

3) Usando o Regedit :
3.1) Localize a chave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace e crie embaixo dela uma nova chave com o seu GUID. Coloque como valor padrão o nome de sua aplicação. Pode ser um nome qualquer, como por exemplo: Config.

3.2) Localize a chave HKEY_CLASSES_ROOT\CLSID e crie embaixo dela uma nova chave com o seu GUID. Nessa chave, edite o valor padrão (default) e informe aí o texto que deve aparecer no Painel de Controle. Pode ser o próprio nome da sua aplicação ou algo mais elaborado, se desejar.

3.3) Para fazer as outras configurações do seu applet, crie os seguintes valores embaixo do valor default do passo anterior :

Nome do valor Tipo do Valor
System.ApplicationName String
Um nome para a sua aplicação. A Microsoft chama isso de nome canônico e permite acessar seu applet a partir da linha de comando. Por exemplo, para um nome ABC71.Config, executar na linha de comando :

control.exe /name ABC71.Config

InfoTip Expandable String
Uma descrição para sua aplicação. Ela aparecerá na forma de um "tooltip" quando você estaciona o mouse sobre o ícone de sua aplicação.
System.ControlPanel.Category String
A lista de categorias do Painel de Controle onde sua aplicação deve aparecer. Se seu applet deve aparecer em mais de uma categoria, separe os números com uma vírgula. Alguns exemplos : 1 (aparência e temas), 5 (performance e manutenção), etc. A lista completa pode ser encontrada aqui.


Mais informações sobre esses valores podem ser encontrado aqui.

3.4) Para associar um ícone, certifique-se que sua aplicação possua um ícone embutido nela. Então, crie uma nova chave embaixo do seu GUID em HKEY_CLASSES_ROOT\CLSID com o nome de DefaultIcon. No valor default dessa chave, inclua o caminho completo para a aplicação que contem o ícone que você deseja e, separado por uma vírgula, o índice de um ícone dessa aplicação. Por exemplo, o valor :
c:\appps\config.exe,0
indica que deve ser usada a aplicação config.exe como fonte e que deve ser exibido o primeiro ícone incluido como recurso no executável (como fazer isso pode valer outro post).
3.5) Por fim, devemos informar qual é a aplicação que dever executada quando o usuário der um clique duplo sobre nosso ícone no painel de controle. Para isso, crie uma nova chave, no mesmo nível do DefaultIcon com o nome de Shell. Embaixo dessa chave, crie uma nova chave, Open. E, para encerrar, nova chave de nome Command e com valor default apontando o camimnho completo da aplicação. Exemplo : c:\appps\config.exe.

Pareceu complicado ? Na verdade é mais trabalhoso do que complicado. Uma vez compreendido o processo, fica fácil de automatizar essa criação na instalação da Solução completa ou através de um arquivo de configuração do registro (extensão .Reg).

Até a próxima !

3 comentários :

Julio Bertolini disse...

Muito legal! Padroniza e centraliza as configurações de software desenvolvido por terceiros.

weder disse...

Olá, em uma aplicação CPL como realizar um APPLICATION.TERMINATED ou um CLOSE enfim como encherrar o CPL via código em delphi ?

Luís Gustavo Fabbro disse...

Weder

Um Close no form principal ou um Application.Terminate em qualquer ponto da aplicação deveria terminá-la. Que tipo de problema vc teve com esses comandos.

OBS: Lembre-se que a aplicação CPL colocada na pasta Windows\System32 é acionada automaticamente pelo Windows Explorer qdo vc entra no painel de controle, mantendo o CPL preso mesmo após o término da aplicação. Nesse caso, só forçando o encerramento do Windows Explorer através do Task Manager...

[]s

Postar um comentário

OBS: Os comentários enviados a este Blog são submetidos a moderação. Por isso, eles serão publicados somente após aprovação.

Observação: somente um membro deste blog pode postar um comentário.