/** * Shows a balloon tooltip message in VBoxTray's * message area in the Windows main taskbar. * * @return IPRT status code. * @param pCtx IPC context of the caller. * @param wParam wParam of received IPC message. * @param lParam lParam of received IPC message. */ int VBoxIPCMsgShowBalloonMsg(PVBOXIPCCONTEXT pCtx, UINT wParam, UINT lParam) { VBOXTRAYIPCMSG_SHOWBALLOONMSG msg; int rc = VBoxIPCReadMessage(pCtx,(BYTE*)&msg, sizeof(msg)); if (RT_SUCCESS(rc)) { hlpShowBalloonTip(ghInstance, ghwndToolWindow, ID_TRAYICON, msg.szContent, msg.szTitle, msg.ulShowMS, msg.ulType); } return rc; }
/** @todo Move this part in VbglR3 and just provide a callback for the platform-specific notification stuff, since this is very similar to the VBoxClient code. */ int VBoxCheckHostVersion(void) { int rc; uint32_t uGuestPropSvcClientID; rc = VbglR3GuestPropConnect(&uGuestPropSvcClientID); if (RT_SUCCESS(rc)) { char *pszHostVersion; char *pszGuestVersion; bool bUpdate; rc = VbglR3HostVersionCheckForUpdate(uGuestPropSvcClientID, &bUpdate, &pszHostVersion, &pszGuestVersion); if (RT_SUCCESS(rc)) { if (bUpdate) { char szMsg[256]; /* Sizes according to MSDN. */ char szTitle[64]; /** @todo Add some translation macros here. */ _snprintf(szTitle, sizeof(szTitle), "VirtualBox Guest Additions update available!"); _snprintf(szMsg, sizeof(szMsg), "Your guest is currently running the Guest Additions version %s. " "We recommend updating to the latest version (%s) by choosing the " "install option from the Devices menu.", pszGuestVersion, pszHostVersion); rc = hlpShowBalloonTip(g_hInstance, g_hwndToolWindow, ID_TRAYICON, szMsg, szTitle, 5000 /* Time to display in msec */, NIIF_INFO); if (RT_FAILURE(rc)) LogFlowFunc(("Guest Additions update found; however: could not show version notifier balloon tooltip, rc=%Rrc\n", rc)); } /* Store host version to not notify again. */ rc = VbglR3HostVersionLastCheckedStore(uGuestPropSvcClientID, pszHostVersion); VbglR3GuestPropReadValueFree(pszHostVersion); VbglR3GuestPropReadValueFree(pszGuestVersion); } VbglR3GuestPropDisconnect(uGuestPropSvcClientID); } return rc; }