Trabalhando com a taskbar do windows no Visual Basic 
Escrito por Daniel Nogueira • Dec 11th, 2007 • Categoria: Programação, Visual Basic
Trabalhar com os objetos da taskbar ( bandeja do sistema ) do windows que se encontra ao lado do relógio é bem útil para nossas aplicações. Permitimos ao usuário deixar a nossa aplicação rodando em “segundo plano” não mantendo-a no desktop, deixando a área de trabalho limpa. Assim quando a aplicação estiver rodando um processo demorado, damos a liberdade para o usuário executar outras tarefas, sem manter o desktop cheio.
Para inserir, modificar, e remover objetos da taskbar, usaremos uma API do windows que se encontra em shell32 e o método a ser chamado é o “Shell_NotifyIconA” .
Exemplo
Neste artigo, vamos criar um simples exemplo, mostrando como trabalhar com está API em nossas aplicações criadas em Visual Basic em sua versão 6.
Primeiro vamos criar a interface do exemplo:
1. Crie um novo projeto Standard EXE.
2. Crie a seguinte estrutura de menus, no formulário:
mnuIconeTaskbar
- mnuIconeTaskbarAlterar “Alterar Ícone”
- mnuIconeTaskbarMostrarFormulario “Mostrar Formulário”
- mnuIconeTaskbarSair “Sair”
3. Vamos precisar usar o componente CommonDialog, para adicionar este componente ao seu projeto entre no menu Project->Components.. e marque na lista o item “Microsoft Common Dialog Control 6.0″, se não constar na lista este item, você tem que instalar o Service Pack 6 do Visual Basic que pode ser encontrado para download aqui . Insira este componente no formulário e renomeie para “cmmdlgArquivo”.
Code
Agora com a nossa interface pronta, vamos a parte de código. Após o Option Explicit declare o tipo typeIconeTaskbar, que será usado para guardarmos os dados que precisamos para criar o ícone na taskbar:
Private Type typeIconeTaskbar
cbSize As Long
hWnd As Long
uId As Long
uFlags As Long
uCallBackMessage As Long
hIcon As Long
szTip As String * 64
End Type
Declare as constantes que usaremos no decorrer do nosso exemplo:
Private Const cntIconeTaskbarInsere = &H0
Private Const cntIconeTaskbarAltera = &H1
Private Const cntIconeTaskbarRemove = &H2
Private Const cntIconeTaskbarMensagem = &H1
Private Const cntIconeTaskbarIcone = &H2
Private Const cntIconeTaskbarTipo = &H4Private Const cntMouseMove = &H200
Private Const cntMouseEsquerdoDuploClick = &H203
Private Const cntMouseEsquerdoDown = &H201
Private Const cntMouseEsquerdoUp = &H202
Private Const cntMouseDireitoDuploClick = &H206
Private Const cntMouseDireitoDown = &H204
Private Const cntMouseDireitoUP = &H205
As constantes que começam com cntIconeTaskbar, são relativas a o objeto na taskbar. E as que começam com cntMouse, são relativas aos eventos do mouse.
Declare a API para podermos interagir com a taskbar:
Private Declare Function apiIconeTaskbar Lib “shell32″ _
Alias “Shell_NotifyIconA” (ByVal dwMessage As Long, objIconeTaskbar As typeIconeTaskbar) As Boolean
Ainda na parte publica do formulário, declare a seguinte variável:
Dim objTaskbar As typeIconeTaskbar
Agora vamos criar duas subs, uma para esconder o formulário e a outra para mostra-lo:
Sub subEscondeFormulario()
Me.Hide
objTaskbar.cbSize = Len(objTaskbar)
objTaskbar.hWnd = Me.hWnd
objTaskbar.uId = vbNull
objTaskbar.uFlags = cntIconeTaskbarIcone Or cntIconeTaskbarTipo Or cntIconeTaskbarMensagem
objTaskbar.uCallBackMessage = cntMouseMove
objTaskbar.hIcon = Me.Icon
objTaskbar.szTip = Me.Caption & vbNullCharapiIconeTaskbar cntIconeTaskbarInsere, objTaskbar
End Sub
Na sub subEscondeFormulario ao ser chamada , executamos um hide no nosso formulário e definimos as propriedades do nosso objeto, para inseri-lo no taskbar. No objeto, definimos o comprimento na propriedade cbSize. Na propriedade hWnd definimos o identificador do nosso formulário. Definimos como nulo o uId. Definimos quais serão os flags na propriedade uFlags. Definimos qual o evento que será gerado por este objeto na propriedade uCallBackMessage. Na propriedade hIcon definimos o ícone que será apresentado na taskbar, que no caso será o ícone que estiver definido no formulário e por ultimo a propriedade szTip, onde fica armazenado o caption do objeto na taskbar.
Após definirmos as propriedades do objeto, executamos a API para inserir o objeto na taskbar. O parâmetro para a API saber que está inserindo um objeto, está apontado por cntIconeTaskbarInsere.
Agora crie a subMostraFormulário, que altera o WindowState do formulário para vbNormal, mostra o formulário, seta o focus nele e atualiza o formulário. Após, executa a API para remover o objeto da taskbar:
Sub subMostraFormulario()
Me.WindowState = vbNormal
Me.Show
Me.SetFocus
Me.Refresh
apiIconeTaskbar cntIconeTaskbarRemove, objTaskbar
End Sub
No evento Load do formulário, executa a subEscondeFormulario:
Private Sub Form_Load()
subEscondeFormulario
End Sub
No evento Resize do formulário, verifica se o formulário foi minimizado, se sim, executa a subEscondeFormulario:
Private Sub Form_Resize()
If Me.WindowState = vbMinimized Then _
subEscondeFormularioEnd Sub
Agora vamos criar o evento MouseMove do formulário. Nele verificamos qual o evento foi executado no nosso objeto que se encontra na taskbar. Caso for um duplo clique com o botão esquerdo, mostramos o formulário. Caso clicarmos com o botão direito do mouse no objeto, abrirá um menu para selecionarmos uma das opções:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim lngEvento As Long
Dim sFilter As StringlngEvento = X / Screen.TwipsPerPixelX
Select Case lngEvento
Case cntMouseEsquerdoDown
Case cntMouseEsquerdoUp
Case cntMouseEsquerdoDuploClick
subMostraFormulario
Case cntMouseDireitoDown
PopupMenu mnuIconeTaskbar
Case cntMouseDireitoUP
Case cntMouseDireitoDuploClick
End Select
End Sub
Agora vamos criar os eventos do nosso menu. No mnuIconeTaskbarAlterar vamos vai abrir uma caixa de dialogo onde podemos selecionar o novo ícone do nosso formulário. Alterando também o ícone que se encontra na taskbar:
Private Sub mnuIconeTaskbarAlterar_Click()
cmmdlgArquivo.DialogTitle = “Selecione um ícone”
cmmdlgArquivo.Filter = “Icone (*.ico)|*.ico|Todos os arquivos (*.*)|*.*”
cmmdlgArquivo.ShowOpenIf cmmdlgArquivo.FileName <> “” Then
Me.Icon = LoadPicture(cmmdlgArquivo.FileName)
objTaskbar.hIcon = Me.Icon
apiIconeTaskbar cntIconeTaskbarAltera, objTaskbarEnd If
End Sub
No mnuIconeTaskbarMostrarFormulario, vamos apenas chamar a subMostraFormulario:
Private Sub mnuIconeTaskbarMostrarFormulario_Click()
subMostraFormulario
End Sub
E finalizando o nosso exemplo, vamos criar o evento do mnuIconeTaskbarSair:
Private Sub mnuIconeTaskbarSair_Click()
subMostraFormulario
Unload Me
End Sub
Debug
Pronto! Agora é só testar, execute o projeto.
Ao iniciar o formulário, o mesmo será escondido, e um ícone será criado na sua taskbar. Ao dar um duplo click no ícone com o botão esquerdo o formulário será mostrado, e o ícone removido da bandeja. Ao minimizar a aplicação, o formulário é escondido novamente, e inserido o ícone na taskbar. Ao clicar no ícone com o botão direito do mouse, teremos três opções: Sair, para fecharmos a aplicação e remover o ícone da bandeja. Mostrar Formulário, para chamar o formulário novamente e remover o ícone da bandeja. E a ultima opção que é Alterar Ícone, para alterarmos o ícone do formulário e do objeto da taskbar.
Download do Exemplo
O link para download do exemplo:
http://www.fdweb.com.br/downloads/TaskbarVB.zip
Confira ofertas de: DVD, filmes, celular, notebook, livros, jogos, Wii, PS3, MP4


Excelente artigo estava precisando mesmo de um exemplo como este.