【发布时间】:2014-06-28 05:55:40
【问题描述】:
我在这里被困了 4 天。我做了一个将程序放在系统托盘中的函数,但这里的问题是它不会显示气球标题和消息。我究竟做错了什么?我什至制作了一个单独的函数来确定我们正在运行的windows os,并根据检测到的操作系统初始化cbSize。任何帮助将不胜感激。下面是函数。
编辑:我正在使用Windows 7,图标显示在系统托盘中,但不会显示消息或标题。我现在也在做这个控制台应用程序,因为它将用作Unity3D 中的插件。我想要一个使用 windows api 但不使用 windows 窗体的解决方案,因为我不希望从中打开任何新窗口。
void createSystemTray()
{
HWND wHandler = GetDesktopWindow();
NOTIFYICONDATA iData;
ZeroMemory(&iData,sizeof(iData));
if(getOsVersion()=="Windows Vista" || getOsVersion()=="Windows 7" || getOsVersion()=="Windows 8" || getOsVersion()=="Windows 8.1")
{
iData.cbSize = sizeof(NOTIFYICONDATA);
}
else if (getOsVersion()=="Windows XP"||getOsVersion()=="Windows XP Professional x64 Edition")
{
iData.cbSize = NOTIFYICONDATA_V3_SIZE;
}
else if (getOsVersion()=="Windows 2000")
{
iData.cbSize = NOTIFYICONDATA_V2_SIZE;
}
else if (getOsVersion()=="UNKNOWN OS")
{
//Assume we have old Windows Os such as Me,95....
iData.cbSize = NOTIFYICONDATA_V1_SIZE;
}
iData.hWnd = wHandler;
iData.uID = 100;
iData.uVersion = NOTIFYICON_VERSION_4;
iData.uCallbackMessage = WM_MESSAGE;
iData.hIcon = LoadIcon(NULL,(LPCTSTR)IDI_WARNING);
lstrcpy(iData.szTip,"My First Tray Icon");
lstrcpy(iData.szInfo,"My App Info");
lstrcpy(iData.szInfoTitle,"My Info Title");
iData.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
Shell_NotifyIcon(NIM_SETVERSION,&iData); //called only when usingNIM_ADD
Shell_NotifyIcon(NIM_ADD,&iData);
}
【问题讨论】:
-
您不需要为 Vista 或更高版本添加 uFlag NIF_SHOWTIP 吗?
-
我添加了 #define NIF_SHOWTIP 0x00000080 然后将 NIF_SHOWTIP 添加到 uFlags 但仍然无法正常工作。
-
您的应用是否有启用 ComCtl v6 的清单?
-
不需要清单。它适用于 Windows 7,并且在台式计算机上运行,而不是在移动设备、Windows 8 或 Android 上运行。
标签: c++ winapi system console-application system-tray