2008-12-15 8 views
3

J'utilise le code suivant dans une application VB 6.0 pour permettre donner à l'application d'une icône de la barre système:application de plateau de système VB 6.0 ne se ferme pas avec élégance lorsque Windows arrête

Option Explicit 

'user defined type required by Shell_NotifyIcon API call 
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 

'constants required by Shell_NotifyIcon API call: 
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  'Button down 
Public Const WM_LBUTTONUP = &H202  'Button up 
Public Const WM_LBUTTONDBLCLK = &H203 'Double-click 
Public Const WM_RBUTTONDOWN = &H204  'Button down 
Public Const WM_RBUTTONUP = &H205  'Button up 
Public Const WM_RBUTTONDBLCLK = &H206 'Double-click 

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 

Je veux l'application pour minimiser à la barre d'état système lorsque vous cliquez sur le X de la fenêtre pour le fermer. Je réalise cela avec le code suivant dans l'événement QueryUnload du formulaire:

Me.WindowState = vbMinimized 
Me.Hide 

Dans le cas de forme Décharger je fais ce qui suit:

Shell_NotifyIcon NIM_DELETE, nid 

Le problème est que lorsque je ferme le système d'exploitation et Windows envoie le message WM_CLOSE à l'application, QueryUnload est en train d'être déclenché mais apparemment pas l'événement Unload, car Windows m'indique qu'il veut terminer ma tâche.

Des idées sur la façon de faire fermer l'application correctement lors de l'arrêt de Windows?

Merci

Répondre

4

C'est ce que je l'utilise quand je ferme mes programmes pour la Query_Unload:

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) 
    Select Case UnloadMode 
     Case 1, 2, 3 'If the program is being terminated by Code, Windows shutting down, or Task Manager 
      Cancel = False 'Allow the program termination 
      Unload Me 
     Case Else 
      Cancel = True 'Else disallow the termination 
    End Select 
End Sub 

Si le cas 2 (Windows Arrêt de l '), j'aller de l'avant et de laisser mettre fin au programme. Faites-moi savoir si cela aide! JFV

1

Voici un exemple d'implémentation de VBNET http://vbnet.mvps.org/index.html?code/subclass/shellnotifybasic.htm

+0

Bien que cela puisse théoriquement répondre à la question, [il serait préférable] (http://meta.stackexchange.com/q/8259) pour inclure la parties essentielles de la réponse ici, et fournir le lien pour référence. –

Questions connexes