Windows 7 Taskbar: ícone e barra de progresso

Para terminar a série de posts sobre a nova barra de tarefas do Windows 7, vou mostrar como trabalhar com ícones e barra de progresso no taskbar. Para isso novamente estarei utilizando os helpers que referenciei no primeiro post sobre a barra de tarefas do Windows 7.

Trocando o Ícone

Algumas vezes pode ser interessante alterar o ícone que aparece na barra de tarefas. Por exemplo, o Messenger utiliza desse recurso: o ícone na barra de tarefas reflete exatamente o status em que me encontro:

icone_1

Executar essa alteração é muito simples. Utilizando o helper Windows7Taskbar precisamos chamar o método SetTaskbarOverlayIcon que recebe o novo ícone e sua descrição. Dessa forma o que precisaríamos fazer é, ao mudar o status de nossa aplicação, chamar esse método (como feito no código abaixo):

 Icon icon = GetIconByStatus((string)cmbStatus.SelectedItem);
Windows7Taskbar.SetTaskbarOverlayIcon(this.Handle, icon, (string)cmbStatus.SelectedItem);

Nesse código estou recuperando o ícone baseado no que foi selecionado num ComboBox e após isso estou chamando o SetTaskbarOverlayIcon para trocar o ícone. O resultado na aplicação que estou utilizando como teste seria o seguinte:

icone_2 

Barra de progresso

Outra possibilidade da nova barra de tarefas é utilizar o ícone que fica na barra de tarefa como uma barra de progresso.

Para demonstrar isso vou utilizar a mesma aplicação acima e realizar uma tarefa de transferência de arquivo (não vou implementar a transferência, mas vou simular um processo que toma algum tempo para terminar). Para isso vou utilizar o método Windows7Taskbar.SetProgressValue. Esse método recebe o percentual no qual o processo se encontra (de 0 a 100).

 Windows7Taskbar.SetProgressValue(Handle, (ulong)_percentFileCompleted,(ulong)100);

Barra de progresso na barra de tarefas 

Com isso, a barra verde vai crescendo de acordo com o valor que foi passado. Além disso podemos passar um status (por exemplo, um status de erro). Para isso utilizamos o Windows7Taskbar.SetProgressState.

 Windows7Taskbar.SetProgressState(Handle, Windows7Taskbar.ThumbnailProgressState.Error);

progress_bar2

Dessa forma podemos acompanhar o progresso da tarefa (atualizando o valor de _percentFileCompleted) ou informar visualmente que um erro ocorreu. Abaixo o código que utilizei para simular o progresso e o erro (que ocorre quando chega a 100%).

 sendFileTimer.Interval = 1000;
sendFileTimer.Tick += delegate
{
    _percentFileCompleted += 10;
    if (_percentFileCompleted == 100)
    {
        sendFileTimer.Stop();
        MessageBox.Show("File operation failed!");
        Windows7Taskbar.SetProgressState(Handle, 
            Windows7Taskbar.ThumbnailProgressState.Error);
        _percentFileCompleted = 0;
    }
    else
    {
        Windows7Taskbar.SetProgressValue(Handle, 
            (ulong)_percentFileCompleted, (ulong)100);
    }
};
sendFileTimer.Start();

Com essas informações, eu fecho a série de 3 posts referentes a nova barra de tarefas do Windows, onde a idéia foi demonstrar algumas possibilidades de utilização dessa nova Taskbar em sua aplicação.

Os outros dois posts foram:

[]s

Alex Schulz