Pular para o conteúdo principal

Windows 7 e C#–Como mudar o ícone da aplicação na Taskbar (simplificado)

O Windows 7 adicionou muitas novidades para o usuário e a mais significativa foi a da barra de tarefas (ou taskbar) que foi redefinida. Agora, muitas funcionalidades foram adicionadas ao seu novo design padrão (embora seja possível retornar ao look’n’feel das versões anteriores do Windows).
Neste post eu vou procurar simplificar para os programadores do Framework .Net e do C# a tarefa de modificar o ícone da aplicação Windows Forms acrescetando ao ícone padrão da janela ícones que possam indicar o estado da aplicação como ocorre no Messenger.

Conhecendo a ideia principal

No Windows 7 aplicações como o Messenger mudam o seu ícone na Taskbar conforme o seu estado. Então, se o usuário está disponível, o ícone fica com um quadrado verde, vermelho quando está ocupado e assim por diante.
imageimage
Este recurso é chamado de Overlay Icon, ou seja, sobreposição de ícones. Se você procurar por este recurso vai encontrar muito material e principalmente, artigos explicando como fazer isto usando as API´s do Windows.
Nos blogs da Microsoft, há vários artigos disponibilizando exemplos e downloads para poder usar este recurso, principalmente com o C# e o Framework .Net. Ao pesquisar sobre o assunto, decidi criar uma receita de bolo para que isso fosse feito da maneira mais simples possível e assim, os programadores poderem ter uma ideia rápida de como usar o recurso.

Pré-requisitos

Para desenvolver este exemplo vai ser necessário:
  1. Visual Studio 2010.
  2. Aplicação Windows Forms criada para o Framework 3.5.
  3. Download da biblioteca contendo as classes para interagir com o Windows 7. O link para o download está no final deste post.

Preparando o projeto

O projeto deve ser do tipo Windows Forms configurado para o Framework 3.5 ou superior uma vez que a biblioteca requer este framework no mínimo. Para modificar a versão do Framework do projeto abra o menu Project > Properties…
image
Aproveite e nesta janela também já mude o ícone da aplicação.
Para este projeto optei por adicionar ícones aos resources do projeto através da aba resources. Adicionei dois para fazer a demonstração. Selecione a aba Resources desta janela. Mude a exibição para Icons e para adicionar os arquivos escolha Add existing file…
image

Adicionando referências

Após fazer o download da biblioteca com as classes wrappers para a taskbar, descompacte-as e adicione ao projeto referências para a biblioteca Microsoft.WindowsAPICodePack.Shell.dll. É nesta onde está localizada a classe responsável em fazer a ligação da aplicação com o Windows: Microsoft.WindowsAPICodePack.Taskbar.TaskbarManager

Interface do projeto

O design da aplicação ficou da seguinte forma:
image
Sendo os componentes um label e um ComboBox. No combobox foram adicionados três itens:
  1. Nenhum – para quando remover as personalizações dos ícones.
  2. Verde – para mostrar o círculo verde no ícone.
  3. Vermelho – para mostrar um círculo vermelho.
Para alterar o ícone usei o evento SelectedIndexChanged do controle ComboBox que passa a ter o código abaixo:
   1: private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
   2:         {
   3:             //sobrepõe o ícone.
   4:             Icon ico = null;
   5:             switch(comboBox1.SelectedIndex)
   6:             {
   7:                 case 1:
   8:                     ico = global::ChangeIcon.Properties.Resources.red_bullet;
   9:                     break;
  10:                 case 2:
  11:                     ico = global::ChangeIcon.Properties.Resources.green_bullet;
  12:                     break;
  13:                 default:
  14:                     ico = null;
  15:                     break;
  16:             }
  17:             Microsoft.WindowsAPICodePack.Taskbar.TaskbarManager obj = TaskbarManager.Instance;
  18:             obj.SetOverlayIcon(ico, comboBox1.Text);
  19:         }
é necessário criar um objeto do tipo Icon, nulo na linha 4. Este vai ser usado para resetar a aparência do ícone na taskbar.
Na linha 5 uso um bloco switch para configurar qual o ícone apropriado, dependendo da seleção do ComboBox. As linhas 8 e 11 usam os ícones que foram associados nos resources do projeto.
A linha 17 é responsável por criar uma instância da classe TaskbarManager que faz o trabalho e na linha seguinte, o código faz a mudança. Observe nas três ficuras a seguir como fica a aparência da aplicação na taskbar.

image
image
image

Considerações

Este exemplo não funciona com o Framework 2.0.
O código está simplificado ao extremo e não fiz considerações sobre as demais classes da biblioteca.
É necessário testar a aplicação sob outras versões do Windows. Até o momento, testei apenas no Windows 7.

Links

Biblioteca de classes para integrar o Framework .Net com o Windows 7 e sua interface:
http://code.msdn.microsoft.com/Windows7Taskbar/Release/ProjectReleases.aspx?ReleaseId=2246

Postagens mais visitadas deste blog

Como gerar scripts para exportar dados no SQL Server 2008

Uma das tarefas mais comuns no trabalho com desenvolvimento de software que consome dados em bancos como o SQL Server 2008 é a necessidade de em algum momento precisarmos exportar os dados de um banco para outro. Quer seja para realizar testes ou fazer simulações existem várias maneiras de se fazer isto. Neste post eu quero demonstrar um recurso do SQL Server Management Studio (SSMS) que permite realizar esta tarefa rapidamente.Para os que estão acostumados a usar esta ferramenta, já devem saber que é possível gerar scripts para o schema e também transferir os dados entre dois bancos distintos. Isto pode ser feito se o SSMS puder conectar-se com as duas bases, de origem e destino. No exemplo que vou dar, o objetivo é gerar o script apenas para uma tabela do banco de dados de exemplo da Microsoft – Northwind.1. Iniciando o assistenteO assistente deve ser iniciado clicando com o botão direito do mouse sobre o banco onde se encontra a tabela a qual iremos gerar o script. Deve se clicar n…

Pivot dinâmico com SQL Server

Passo a passo para usar pivoteamento dinâmicoOs bancos de dados bem configurados e definidos armazenam os dados de forma a otimizar o acesso, evitando duplicidade e garantindo a integridade. Porém, em muitas situações isto pode dificultar a apresentação de forma adequada sendo necessário preparar os dados usando vários recursos entre os quais, fazer o pivoteamento.Se você não precisou ainda usar ou não sabe o que é consiste em transformar cada linha de uma determinada coluna em colunas de uma nova consulta.Assim, considere uma tabela que armazene as notas bimestrais de um boletim. Uma possível estrutura para esta tabela seria algo assim:ColunaTipo de dado/TamanhoDisciplinanvarchar(50)BimestreIntNotanumeric(5,2)Uma consulta select nesta tabela com alguns dados traria um resultado parecido com o abaixo:Porém pode ser que para apresentar estes dados em um relatório seja necessário transformar cada bimestre em uma coluna e agrupar as notas nestas colunas para que fique dessa forma:Isto po…

Desabilitando o auto commit no SSMS (SQL Server Management Studio)

(Ou, como prevenir desastres e manter o emprego a salvo…)Neste post vai uma pequena mas tremendamente útil dica para desabilitar o auto commit da aplicação SQL Server Management Studio (SSMS) que é usada por dez entre dez usuários do banco de dados SQL Server para fazer consultas, alterações e executar scripts no banco de dados. (Preferências à parte, realmente muita gente usa),A primeira e mais importante notícia é que, diferentemente da ferramenta do Oracle, este editor de scripts do SQL Server vem com o recurso de auto commit ativado por padrão, assim, qualquer instrução DML (alteração dos dados com update, insert e delete) ou DDL (alteração no banco como create, drop, alter, etc.) será imediatamente enviada ao banco e persistida.Isto pode ser altamente crítico pois se estiver executando as instruções em um banco de dados de produção não haverá muitas formas de desfazer se é que haverá.Inicialmente, pode se evitar muitos acidades executando estas instruções dentro de um bloco BEGIN…