Ciao,

utilizzo questo codice ( How to use the System Tray directly from Visual Basic ) per minimizzare i miei programmi nella SysTray, ora però ho fatto un progetto con MDI + FormFiglie e questo codice non funziona, grazie all'aiuto di TheTruster ho fatto delle modifiche, ma ancora non funziona come dovrebbe, ecco la situazione:

FUNZIONA

* Icona visualizzata in SysTray

NON FUNZIONA

* visualizzazione Menu al click col destro in SysTray
* ... di conseguenza imposibile testare il resize/altro ...

CODICE

codice:
Private Sub MDIForm_Load()

'##### Gestisco NotifyIcon in SysTray #####

With nid
    .cbSize = Len(nid)
    .hwnd = Me.hwnd
    .uId = vbNull
    .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
    .uCallBackMessage = WM_MOUSEMOVE
    .hIcon = Me.Icon
    .szTip = "TooTip" & vbNullChar
End With
       
Shell_NotifyIcon NIM_ADD, nid

End Sub
codice:
Private Sub MDIForm_QueryUnload(Cancel As Integer, UnloadMode As Integer)

If UnloadMode = vbFormControlMenu Then
    'Dim risp As Integer
    'risp = MsgBox("Il programma è stato minimizzato sulla SystemTray", vbExclamation)
    Me.Hide
    Cancel = True
End If

End Sub
codice:
Private Sub MDIForm_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

Dim Result As Long
Dim msg As Long

msg = X / Screen.TwipsPerPixelX

Select Case msg
'    Case WM_LBUTTONUP
'         Me.WindowState = vbNormal
'         Result = SetForegroundWindow(Me.hwnd)
'         Me.Show
    Case WM_LBUTTONDBLCLK
         Me.WindowState = vbNormal
         Result = SetForegroundWindow(Me.hwnd)
         Me.Show
    Case WM_RBUTTONUP
         Result = SetForegroundWindow(Me.hwnd)
         Me.PopupMenu Me.mPopupSys
End Select

End Sub
codice:
Private Sub MDIForm_Resize()

If Me.WindowState = vbMinimized Then Me.Hide
    
End Sub
codice:
Private Sub mPopRestore_Click()

Dim Result As Long

Me.WindowState = vbNormal
Result = SetForegroundWindow(Me.hwnd)
Me.Show

End Sub
codice:
Private Sub mPopExit_Click()

Unload Me
       
End Sub
codice:
Private Sub MDIForm_Unload(Cancel As Integer)

Shell_NotifyIcon NIM_DELETE, nid
    
End Sub

codice:
Option Explicit

'##### modulo.bas --> Dichiaro il necessario per ridurre in SysTray #####

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 Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202
Public Const WM_LBUTTONDBLCLK = &H203
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_RBUTTONUP = &H205
Public Const WM_RBUTTONDBLCLK = &H206

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 nid As NOTIFYICONDATA
Qualcuno riesce a trovare l'errore?