为什么 Shell_NotifyIcon 不显示气球通知?

Why Shell_NotifyIcon not showing balloon notification?

我编写了一个示例应用程序来了解如何将气球通知添加到 Win32 应用程序。有人可以指出为什么 Shell_NotifyIcon() 不显示气球通知吗? GetLastError returns 2147500037 对于 Shell_NotifyIcon().

#include <Windows.h>
#include "shellapi.h"

int main()
{
    NOTIFYICONDATA nid;
    nid.cbSize = sizeof(NOTIFYICONDATAA_V3_SIZE);
    nid.uTimeout = 500;
    nid.uID = 1;
    nid.uFlags = NIF_TIP | NIF_ICON | NIF_MESSAGE | NIF_INFO | 0x00000080;
    nid.uCallbackMessage = WM_USER + 200;
    nid.hIcon = LoadIcon(NULL, IDI_INFORMATION);
    lstrcpy(nid.szTip, L"Test Tip");
    lstrcpyW(nid.szInfoTitle, L"Test Title");
    Shell_NotifyIcon(NIM_ADD, &nid); //GetLastError returns - 2147500037

    return 0;
 }

应该使用 NOTIFYICONDATA_V3_SIZE 而不是 NOTIFYICONDATAA_V3_SIZE,因为您显然使用了 Unicode(从 lstrcpyWL"..." 可以看出),并且您使用默认值 NOTIFYICONDATA

应该只使用 nid.cbSize = NOTIFYICONDATA_V3_SIZE;nid.cbSize = sizeof(NOTIFYICONDATA),你不希望有整数常量的大小。

在调用 GetLastErrror 之前还应检查 Shell_NotifyIcon 结果,如果不是 FALSE,则 GetLastError 不相关。