windows 气泡提示

windows 气泡使用API Shell_NotifyIcon,首先需要使用Shell_NotifyIcon 的ADD添加一个通知icon,就是windows通知小窗口里面的小图标,之后再利用NIM_MOIDFY显示对应的气泡

 

大致代码 AddNotificationIcon

复制代码
BOOL AddNotificationIcon(HWND hwnd)
{
    NOTIFYICONDATA nid = {sizeof(nid)};
    nid.hWnd = hwnd;
    // add the icon, setting the icon, tooltip, and callback message.
    // the icon will be identified with the GUID
    nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE | NIF_SHOWTIP | NIF_GUID;
    nid.guidItem = __uuidof(SpiderIcon);
    //nid.uCallbackMessage = WMAPP_NOTIFYCALLBACK;
     
    LoadIconMetric(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_NOTIFICATIONICON), LIM_SMALL, &nid.hIcon);
    //LoadString(GetModuleHandle(NULL), IDS_TOOLTIP, nid.szTip, ARRAYSIZE(nid.szTip));
    std::wstring test = L"Spider";
     
    wcscpy(nid.szTip, test.c_str());
    //memcpy(nid.szTip, test.c_str(), test.size());
    Shell_NotifyIcon(NIM_ADD, &nid);
 
    // NOTIFYICON_VERSION_4 is prefered
    nid.uVersion = NOTIFYICON_VERSION_4;
    return Shell_NotifyIcon(NIM_SETVERSION, &nid);
}
复制代码

 

 

ShowPrintJobBalloon

复制代码
BOOL ShowPrintJobBalloon()
{
    // Display a balloon message for a print job with a custom icon
    NOTIFYICONDATA nid = {sizeof(nid)};
    nid.uFlags = NIF_INFO | NIF_GUID;
    nid.guidItem = __uuidof(SpiderIcon);
    nid.dwInfoFlags = NIIF_USER | NIIF_LARGE_ICON;
    std::wstring title = L"Spider集控";
    std::wstring szInfo = L"打扰了,收到来自集控的关机指令,将在您用完之后执行";
 
    //wcscpy(nid.szInfoTitle, title.c_str());
    wcscpy(nid.szInfo, szInfo.c_str());
    //LoadString(g_hInst, IDS_PRINTJOB_TITLE, nid.szInfoTitle, ARRAYSIZE(nid.szInfoTitle));
    //LoadString(g_hInst, IDS_PRINTJOB_TEXT, nid.szInfo, ARRAYSIZE(nid.szInfo));
    LoadIconMetric(g_hInst, MAKEINTRESOURCE(IDI_NOTIFICATIONICON), LIM_LARGE, &nid.hBalloonIcon);
    return Shell_NotifyIcon(NIM_MODIFY, &nid);
}
复制代码

 

注意点:

  1. Notification需要一个唯一ID(再win7以及win7以上),第一次运行程序时会将这个uuid和你的应用程序绑定再一起(注意是和你的决定路径),你的exe如果路径变了UUID也需要变,即一个uuid对应着一个你的应用程序(绝对路径)
  2. 你的窗口可以是隐藏的,但是如果处在全屏模式或者投影等模式,windows将会自动开启专注助手以防止用户受打扰,所以再开启之后你的通知将不会显示,解决这个有两种方案,一将窗口显示出来,二是禁止专注助手。

 

posted @   gd_沐辰  阅读(872)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示