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 = &H4

Private 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 & vbNullChar

apiIconeTaskbar 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 _
subEscondeFormulario

End 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 String

lngEvento = 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.ShowOpen

If cmmdlgArquivo.FileName <> “” Then

Me.Icon = LoadPicture(cmmdlgArquivo.FileName)
objTaskbar.hIcon = Me.Icon
apiIconeTaskbar cntIconeTaskbarAltera, objTaskbar

End 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

Tagged as: , ,

Um comentário »

  1. Excelente artigo estava precisando mesmo de um exemplo como este.

Deixe um comentário