Windows 7 Taskbar: como utilizar em suas aplicações

Uma das novidades do Windows 7 é a nova Taskbar, e entre outras novidades do Taskbar está a “Jump List”.

A idéia da Jump List é facilitar o acesso aos arquivos utilizados recentemente, bem como ao acesso a tarefas comuns do aplicativo.

Para isso, e sem nenhuma customização nas aplicações, podemos adicionar no Jump List a lista de arquivos recentemente abertos pela aplicação. Como isso é nativo do Windows 7, só precisamos registrar a associação do tipo de arquivo com a aplicação (pelo próprio SO, utilizando o “abrir com”, ou também podemos fazer a associação utilizando uma linha de código). Dessa forma, mesmo aplicações anteriores as Windows 7 podem tirar proveito da Jump List, mostrando os arquivos recentemente abertos que possuem a extensão associada com a aplicação.

Além dos arquivos recentes, como vocês podem ver na imagem abaixo, ao clicar com o botão direito do mouse sobre um aplicativo que está no Taskbar (no caso o Messenger), temos uma lista de tarefas que podemos executar. Então com pouco código (que vou mostrar aqui), podemos facilitar o acesso e uso de nossas aplicações.

Taskbar_JumpList

 

Dessa forma, vou mostrar como adicionar arquivo de forma explicita aos documentos recentes (mesmo sem esse arquivo ter sido utilizado), pra depois demonstrar como criar tarefas customizadas e categorias na Jump List.

Para facilitar o desenvolvimento, vou utilizar o Windows 7 taskbar: Developer Resources que contém implementado alguns Helpers, além de exemplos de utilização do Taskbar.

Associando um tipo de arquivo ao aplicativo

Para associar um tido de arquivo ao meu aplicativo, eu utilizei o Wrapper que está no projeto “Windows7.DesktopIntegration”, que contem um helper (RegistrationHelper) com essa finalidade.

Com o o RegistrationHelper, o que precisamos fazer é chamar o método “RegisterFileAssociations” passando o Identificador da aplicação, true ou false para indicar se é uma ação para desassociar (false indica associar), o identificador do processo (onde podemos utilizar outro helper existente o Windows7 DesktopIntegration), a aplicação que deve abrir o arquivo, e as extensões.

 RegistrationHelper.RegisterFileAssociations(
                APP_ID, false, Windows7Taskbar.GetCurrentProcessAppId(),
                Assembly.GetExecutingAssembly().Location + " /doc:%1",
                ".rtf");

Após isso, Sua aplicação fica disponível para abrir aquele determinado tipo de arquivo, mas até aqui, não tem nada demais.

Imagem_1

Adicionando arquivos abertos recentemente na lista

Após associar o tipo de arquivo, temos que informar quando algum arquivo associado a nossa aplicação foi aberto ou modificado.

Podemos fazer isso utilizando o a caixa de dialogo do Windows 7 através do “OpenFileDialog”:

 OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() != DialogResult.OK)
    return;
rtbText.LoadFile(ofd.FileName);

Nesse exemplo estou abrindo um arquivo .rtf num RichTextBox.

Com isso, ao abrir o documento pela minha aplicação, o arquivo já aparece na lista de arquivos recentes.

Imagem_2

Outra forma de adicionar um arquivo na lista de recentes, é explicitamente adiciona-lo na Jump List.

Utilizando o helper existente no Windows7 IntegrationDesktop, só precisamos chamar o método AddToRecent do JumpListManager passando o nome do documento.

 JumpListManager jlm = new JumpListManager(APP_ID);
jlm.UserRemovedItems += delegate { };
jlm.AddToRecent("Sample Document.rtf");

Inserindo tarefas e categorias

Até agora vimos o que é padrão no Jump List. Mas podemos ir um pouco além adicionando tarefas e categorias na lista. Para isso precisamos:

  • utilizar o JumpListManager
  • sobrescrever o “WndProc”
  • verificar se a mensagem é Windows7Taskbar.TaskbarButtonCreatedMessage (indicando que o Taskbar foi criado)
  • Registrar o evento JumpListManager.UserRemovedItems (esse evento é invocado se, quando a Jump List estiver sendo construida, for verificado que um item foi removido da Jump List pelo usuário)
  • chamar o método “AddUserTask” (adicionar uma tarefa) ou o “AddCustomDestination” para criar uma “categoria”
         protected override void WndProc(ref Message m)
        {
            if (m.Msg == Windows7Taskbar.TaskbarButtonCreatedMessage)
            {
                _jumpListManager = new JumpListManager(APP_ID);
                _jumpListManager.UserRemovedItems += delegate { };
                _jumpListManager.AddUserTask(new ShellLink
                {
                    Path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), 
                            @"Windows NT\Accessories\wordpad.exe"), Title = "Launch Wordpad"
                });

                _jumpListManager.AddCustomDestination(new ShellItem
                {
                    Path = @"<real path here>\SampleDocument.rtf",
                    Category = "Interesting"
                });
            }

            _jumpListManager.Refresh();
        }

 

Quando estamos adicionando uma tarefa, no Path passamos o caminho do executável (no exemplo o caminho do wordpad.exe) e o título que vai aparecer na JumpList. Já quando estamos adicionando uma categoria, no Path informamos o caminho do arquivo e qual a categoria na qual ele vai ficar.

Imagem_3

Com isso, é possível criar uma forma bem fácil e prática de acessar sua aplicação utilizando a nova barra de tarefas do Windows 7, e o que é melhor, com pouco esforço.

[]s

Alex Schulz