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 @ 2021-07-18 23:01  gd_沐辰  阅读(836)  评论(0编辑  收藏  举报