gpt4 book ai didi

c++ - Win32 API,系统托盘图标消失

转载 作者:搜寻专家 更新时间:2023-10-31 00:35:27 25 4
gpt4 key购买 nike

我目前正在开发一个 Win32 应用程序,我希望在系统任务栏中有一个图标。我正在使用 Shell_NotifyIcon 来显示图标,效果很好,但图标经常消失,没有任何解释......

事实上,当我在构建代码后第一次在 Visual Studio 2013 中运行代码时,或者当我从另一个目录中的 .exe 运行应用程序时(我没有有任何错误,如 missing dll 并且应用程序正在运行,但图标不再存在...)。

我用来创建图标的代码:

// At the beginning of the file
static NOTIFYICONDATA m_nid ;

// After
m_nid.cbSize = sizeof (m_nid);
m_nid.hWnd = hwnd;
m_nid.uVersion = NOTIFYICON_VERSION_4 ;
static const GUID myGUID =
{0x5CA81ADA, 0xA481, 0x4BA8, {0x8B, 0x70, 0x80, 0x3f, 0x48, 0x67, 0xA1, 0x68}};
m_nid.guidItem = myGUID;

m_nid.uFlags = NIF_ICON | NIF_TIP | NIF_GUID | NIF_MESSAGE ;
m_nid.uCallbackMessage = WM_SYSTEM_TRAY;
StringCchCopy (m_nid.szTip, ARRAYSIZE (m_nid.szTip), NotificationManager::APPLICATION_NAME.c_str ());
m_nid.hIcon = (HICON) LoadImage (NULL, L"icon_v1.ico", IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE);

ShowWindow (m_nid.hWnd, SW_HIDE);
Shell_NotifyIcon (NIM_ADD, &m_nid);
Shell_NotifyIcon (NIM_SETVERSION, &m_nid);

编辑:我认为这是 GUID 的问题,因为在 Release 模式下图标没有显示,但自从我更改了 GUID 它正在工作...但是当我在 Visual Studio 之外运行该程序时它仍然无法工作...

最佳答案

系统托盘图标消失的原因有多种可能。

  1. 与图标关联的 HWND 已被销毁。

  2. 在现代 Windows 版本中,该图标已被应用控制之外的用户设置隐藏起来。

  3. Windows 资源管理器崩溃并重新启动,但您没有处理 TaskbarCreated 消息以重新添加您的图标。

编辑:另一种可能性是您只是将错误的输入传递给 Shell_NotifyIcon(),它因您忽略的错误而失败。

关于c++ - Win32 API,系统托盘图标消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23858262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com