Colocar el icono de la aplicacion en el systray

Iniciado por ANTRAX, Julio 26, 2010, 12:04:01 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Julio 26, 2010, 12:04:01 PM Ultima modificación: Mayo 12, 2014, 03:12:10 PM por Expermicid
En un modulo:

Código: vb
Public nid As NOTIFYICONDATA
Public Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
Public Const WM_CHAR = &H102
Public Const WM_SETTEXT = &HC
Public Const WM_USER = &H400
Public Const WM_KEYDOWN = &H100
Public Const WM_KEYUP = &H101
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_CLOSE = &H10
Public Const WM_COMMAND = &H111
Public Const WM_CLEAR = &H303
Public Const WM_DESTROY = &H2
Public Const WM_GETTEXT = &HD
Public Const WM_GETTEXTLENGTH = &HE
Public Type NOTIFYICONDATA
cbSize As Long
hwnd As Long
uId As Long
uFlags As Long
uCallBackMessage As Long
hIcon As Long
szTip As String * 64
End Type
Public Const NIM_ADD = &H0
Public Const NIM_MODIFY = &H1
Public Const NIM_DELETE = &H2
Public Const NIF_MESSAGE = &H1
Public Const NIF_ICON = &H2
Public Const NIF_TIP = &H4
Public Const WM_MOUSEMOVE = &H200
Public Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long

Sub InitializeTrayIcon()
With nid
.cbSize = Len(nid)
.hwnd = frmMain.hwnd 'nombre del form que estara minimizado
.uId = vbNull
.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
.uCallBackMessage = WM_MOUSEMOVE
.hIcon = frmMain.Icon 'nombre del formulario que contiene el icono
End With
Shell_NotifyIcon NIM_ADD, nid
End Sub


Y en el Form:

Código: vb
Private Sub Form_Load()
InitializeTrayIcon
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim Result As Long
Dim msg As Long
If Me.ScaleMode = vbPixels Then
msg = X
Else
msg = X / Screen.TwipsPerPixelX
End If
Select Case msg
Case 517
Me.PopupMenu MNU
Case 514
Result = SetForegroundWindow(Me.hwnd)
Me.Show
End Select
End Sub

Private Sub Form_Terminate()
Shell_NotifyIcon NIM_DELETE, nid
End Sub

Private Sub Form_Unload(Cancel As Integer)
Shell_NotifyIcon NIM_DELETE, nid
End Sub


Julio 26, 2010, 12:20:09 PM #1 Ultima modificación: Mayo 12, 2014, 03:12:35 PM por Expermicid
Código: vb

'esto va en un modulo.bas
'lo modifique y lo cree a mi gusto con funciones esta bn pero lo pueden modificar mas si kieren
'_k4tz3_ vb6.0
Public Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean
Public Type NOTIFYICONDATA
cbSize As Long
hwnd As Long
uId As Long
uFlags As Long
uCallBackMessage As Long
hIcon As Long
szTip As String * 128
dwState As Long
dwStateMask As Long
szInfo As String * 256
uTimeout As Long
szInfoTitle As String * 64
dwInfoFlags As Long
End Type
Public Const NIM_ADD = &H0
Public Const NIM_DELETE = &H2
Public Const NIF_MESSAGE = &H1
Public Const NIF_ICON = &H2
Public Const NIF_INFO = &H10
Public Const NIF_TIP = &H4
Public Const WM_MOUSEMOVE = &H200
Public Const WM_LBUTTONDBLCLK = &H203
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202
Public Const WM_RBUTTONDBLCLK = &H206
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_RBUTTONUP = &H205
Public nID As NOTIFYICONDATA
Public Function CierraTray(frm As Form)
With nID
.cbSize = Len(nID)
.hwnd = frm.hwnd
.uId = 1&
End With
Shell_NotifyIcon NIM_DELETE, nID
End Function
Public Function showfrm(frm As Form)
    If frm.WindowState = 1 Then frm.WindowState = 0
    frm.Show
    End Function
Public Function tray(frm As Form, Title As String)
With nID
.cbSize = Len(nID)
.hwnd = frm.hwnd
.uId = vbNull
.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE Or NIF_INFO
.uCallBackMessage = WM_MOUSEMOVE
.hIcon = frm.Icon
.szTip = Title & Chr(0) '& vbNullChar
.dwState = 0
.dwStateMask = 0
.szInfoTitle = "mensaje" & Chr(0)
.szInfo = "mensaje" & vbNullChar
.uTimeout = 1
End With
Shell_NotifyIcon NIM_ADD, nID
End Function


y esto va en las declaraciones para llamarlo de vuelta al form con un dos click y pra activar el click derecho en el systray para llamar a un popupmenu o lo  quieran o un o dos click.
Código: vb
Private Declare Function ReleaseCapture Lib "user32.dll" () As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_NCLBUTTONDOWN      As Long = &HA1
Private Const HTCAPTION             As Long = 2

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
   
    ReleaseCapture
    SendMessage hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&

   Dim lResult As Long
    Dim lMsg As Long

    If Me.ScaleMode = vbPixels Then
        lMsg = x
    Else
        lMsg = x / Screen.TwipsPerPixelX
    End If

    Select Case lMsg
        Case WM_RBUTTONUP
            lResult = SetForegroundWindow(Me.hwnd)
           Me.PopupMenu mmenutray 'click derecho en el systray llama al popumenu dado en parametro !
        Case WM_LBUTTONDBLCLK
            If Me.Visible = False Then
                Call showfrm(Me) ' llamamos al formulario llamando a showfrm!
                           
            End If
    End Select
    End Sub
'para llamar al systray cuando se minimized
Private Sub Form_Resize()
If Me.WindowState = vbMinimized Then
           Call tray(Me, TempTitle)
            Me.Hide
        End If
End Sub

Private Sub Form_Unload(Cancel As Integer)
Call CierraTray(Me)
end sub
'mas claro que el agua