Windows 关闭时 VB 6.0 系统托盘应用程序不会正常关闭 [英] VB 6.0 system tray application doesn't close gracefully when Windows shuts down

查看:37
本文介绍了Windows 关闭时 VB 6.0 系统托盘应用程序不会正常关闭的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 VB 6.0 应用程序中使用以下代码来为应用程序提供系统托盘图标:

I'm using the following code within a VB 6.0 application to allow give the application a system tray icon:

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

当您单击窗口的 X 关闭它时,我希望应用程序最小化到系统托盘.我在表单的 QueryUnload 事件中使用以下代码完成此操作:

I want the application to minimize to the system tray when you click the Window's X to close it. I accomplish this with the following code in the form's QueryUnload event:

Me.WindowState = vbMinimized
Me.Hide

在表单的 Unload 事件中,我执行以下操作:

In the form's Unload event I do the following:

Shell_NotifyIcon NIM_DELETE, nid

问题是当我关闭操作系统并且 Windows 向应用程序发送 WM_CLOSE 消息时,QueryUnload 被触发但显然不是 Unload 事件,因为 Windows 提示我它想要结束我的任务.

The PROBLEM is that when I shut down the operating system and Windows sends the WM_CLOSE message to the app, QueryUnload is being fired but apparently not the Unload event, since Windows prompts me that it wants to end my task.

有关如何在 Windows 关机时正常关闭应用程序的任何想法?

Any ideas on how to get the application to close gracefully on Windows shutdown?

谢谢

推荐答案

这是我在关闭 Query_Unload 程序时使用的:

This is what I use when I am closing my programs for the 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

如果情况 2(Windows 关闭),我会继续让程序终止.

If Case 2 (Windows Shutting Down), I go ahead and let the program terminate.

让我知道这是否有帮助!JFV

Let me know if this helps! JFV

这篇关于Windows 关闭时 VB 6.0 系统托盘应用程序不会正常关闭的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆