Windows 关闭时,VB 6.0 系统托盘应用程序无法正常关闭

2024-04-17

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

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 事件中使用以下代码来完成此操作:

Me.WindowState = vbMinimized
Me.Hide

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

Shell_NotifyIcon NIM_DELETE, nid

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

关于如何让应用程序在 Windows 关闭时正常关闭有什么想法吗?

Thanks


这是我在关闭 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 关闭),我会继续让程序终止。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows 关闭时,VB 6.0 系统托盘应用程序无法正常关闭 的相关文章

  • HWND 创建时间

    我是这个社区的新手 在使用我的自动化脚本 1 时遇到一个问题 我想获取 HWND 的创建时间 我在从 FindWindowEx 检索到的数组中有一组 HWND 我想在数组中找到最后根据系统时间创建的 HWND 我对窗口钩子没有足够的了解 但
  • 预注册 ATL 窗口类

    我在一个项目中使用了 ATL 和 WTL 的组合 并从中派生了我自己的类CWindowImpl 看起来像这样 class CMyControl public CWindowImpl
  • VT_DATE 类型的微秒支持

    VT DATE 变体类型是否支持微秒分辨率 请告诉我如何在VB中显示相同的内容 http msdn microsoft com en us library ms221646 aspx http msdn microsoft com en u
  • 为什么 SetCursorPos 将光标位置重置到显示屏的左侧?

    SetCursorPos https learn microsoft com en us windows win32 api winuser nf winuser setcursorpos将光标移动到指定的屏幕坐标 然而 它似乎有一个错误
  • 原生 Linux 应用程序可像 ResHacker 一样编辑 Win32 PE

    我想运行自动修改 dll服务 用户提交特定的 dll 我在服务器上修改它 然后用户可以下载 dll的修改版本 是否有任何本机 Linux 应用程序提供常见的 Win32 PE 修改功能 例如图标 字符串 加速器 对话等 至少提供命令行或脚本
  • 为什么 FindWindow 找到了 EnumChildWindows 找不到的窗口?

    我正在寻找一个类名称为 CLIPBRDWNDCLASS 的窗口 它可以在办公应用程序和其他应用程序中找到 如果我使用 FindWindow 或 FindWindowEx 我找到第一个具有此类的 HWND 但我想要all具有该类的窗口 因此我
  • 如何在Windows上用C语言实现定时器

    如何在 C 中创建一个计时器 时间到期后 我应该能够调用回调函数 平台是windows 有人可以指导我吗 问候 米敦 看一眼SetTimer http msdn microsoft com en us library ms644906 28
  • 我可以在 C# 进程中使用 SetErrorMode 吗?

    我正在准备写一个在线法官核心 一个可以编译用户代码并运行程序来检查答案的程序 如uva online Judge 我在捕获提交程序的异常时遇到问题 如下所示 int main while scanf d d n m printf d n n
  • 如何通过API退出Win32应用程序?

    我有一个使用 Win32 API 编写的 C Win32 应用程序 我希望强制它在其中一个函数中退出 有没有类似的东西Exit or Destroy or Abort 类似的东西会终止它吗 哎呀呀呀呀呀呀 不要做任何这些事情 exit 和
  • WINAPI/DWMAPI 不规则形状的模糊窗口

    注意 这不是关于无边框窗口的问题 因此 前几天我在 Windows 7 上浏览 开始 菜单时偶然发现了这个程序 它是一个本机 Windows 程序 称为 数学输入面板 现在 我对窗户的形状很好奇 我知道它并不是完全由 DWM 绘制的 因为边
  • 如何正确使用和实例化现有预览处理程序

    我正在尝试使用现有的预览处理程序来显示文件的预览 我编写了一个简单的测试程序 以 1 查找给定文件的预览处理程序的 CLSID 2 实例化预览处理程序 3 通过流或文件初始化它 4 在基本窗口上渲染预览 这有效 或多或少 It works
  • 具有自定义镶边的 WPF 窗口在右侧和底部有不需要的轮廓

    我使用 Microsoft Windows Shell dll 创建了带有自定义镶边的 WPF 窗口 这是代码
  • 如何使用 Python 与窗口的 GUI 交互?

    假设您想打开myapp exe 打开第三个菜单 然后选择第二个菜单项 即像用户使用键盘或鼠标一样 然后在对话框窗口中选择第二个按钮 pyahk https pyahk readthedocs io en latest and pyautog
  • Vista幻影目录

    我们有一个程序 安装程序会检查配置文件是否存在 如果存在 它不会复制该文件 它假设用户已修改其配置文件并希望保留这些修改 不幸的是 这是一个 Vista 之前的应用程序 它将配置文件保存在 Program Files 中 问题是 如果你在重
  • 如何使用 C++ 禁用另一个进程中窗口上的关闭按钮?

    我需要从另一个进程禁用窗口上的关闭按钮 我有它的句柄hWnd我尝试这样做 DWORD dwCStyle GetClassLongPtr hWnd GCL STYLE SetClassLongPtr hWnd GCL STYLE dwCSty
  • 调整大小时在窗口中绘图留下未绘制的边框

    我遇到的问题看似微不足道 但我找不到解决的方法 这里是 我有一个窗口 里面有一些图形 为了简单起见 我们假设它是一个实心绿色矩形 填充了窗口的整个客户区域 我希望每次窗口改变大小时都重新绘制这个矩形并填充整个窗口 我最初做的就是这样的 我已
  • 如何查明 .exe 是否正在 C++ 中运行?

    给定进程名称 例如 程序 exe C 标准库没有这样的支持 您需要一个操作系统 API 来执行此操作 如果这是 Windows 那么您将使用 CreateToolhelp32Snapshot 然后使用 Process32First 和 Pr
  • 以编程方式更改任务栏图标(Win32,C++)[重复]

    这个问题在这里已经有答案了 我有一个 C win32 程序 我想在运行时编辑任务栏图标以显示有关该程序的警报等 但是我对 win32 api 不太有经验 而且我找不到任何东西在线的 我发现的最接近的是http www windows tec
  • 是否可以通过 C#.NET 编写 Win32 .dll 文件?

    是否可以通过 C NET 编写 Win32 dll 文件 如果是的话 我在哪里可以找到一些教程 如果不是 那么您对编写 Win32 DLL 有什么建议 Thanks 对的 这是可能的 事实上有一个工具可以做到这一点 它在 Rainmeter
  • win32上的64位Anaconda使用32位还是64位?

    我猜答案是 32 位 但我有点困惑为什么我什至可以在 win32 中安装 Anaconda 64 我曾经在 Anaconda 64 位上工作 但我刚刚意识到我的系统是 win32 这有时会产生一些异常 例如 请参阅我为 scipy 打开的这

随机推荐