void CMainFrame::UpdateFrameTitle(LPCWSTR pszTitle) { CString strTitle; strTitle = pszTitle; SetWindowTextW(strTitle+L" - 驾照刷学时 V1.1"); BOOL bHasAdd = NotifyData.cbSize == sizeof(NOTIFYICONDATAW); if ( FALSE == bHasAdd ) { NotifyData.cbSize = sizeof(NOTIFYICONDATAW); NotifyData.uID = 1234; NotifyData.hIcon = (HICON)LoadIcon(theApp.m_hInstance,MAKEINTRESOURCEW(IDR_MAINFRAME)); NotifyData.hWnd = m_hWnd; NotifyData.uCallbackMessage = WM_USER+2222; wcscpy_s(NotifyData.szTip,128,pszTitle); NotifyData.uFlags = NIF_ICON|NIF_TIP|NIF_MESSAGE ; BOOL bRes = Shell_NotifyIconW(NIM_ADD, &NotifyData); } else { wcscpy_s(NotifyData.szTip,128,pszTitle); BOOL bRes = Shell_NotifyIconW(NIM_MODIFY, &NotifyData); } }
BOOL WINAPI Shell_NotifyIconA(DWORD dwMessage, PNOTIFYICONDATAA lpData) { NOTIFYICONDATAW tndw; BOOL bResult; // Clear all fields by default in our local UNICODE copy memset(&tndw, SIZEOF(NOTIFYICONDATAW), 0); // Transfer those fields we are aware of as of this writing tndw.cbSize = SIZEOF(NOTIFYICONDATAW); tndw.hWnd = lpData->hWnd; tndw.uID = lpData->uID; tndw.uFlags = lpData->uFlags; tndw.uCallbackMessage = lpData->uCallbackMessage; tndw.hIcon = lpData->hIcon; // Since the buffer exists within the structure, we cannot call // ConvertStrings; rather, we call MultiByteToWideChar directly MultiByteToWideChar(CP_ACP, 0, lpData->szTip, ARRAYSIZE(tndw.szTip), tndw.szTip, ARRAYSIZE(tndw.szTip)); return Shell_NotifyIconW(dwMessage, &tndw); }
static BOOL _trayicon_init (SeafileTrayIcon *icon) { if (!applet->hWnd) create_applet_window (); UINT icon_id; if (applet->client && applet->client->connected) icon_id = IDI_STATUS_UP; else icon_id = IDI_STATUS_DOWN; icon->nid.cbSize = sizeof(NOTIFYICONDATAW); icon->nid.hWnd = applet->hWnd; icon->nid.uID = 0; icon->nid.hIcon = LoadIcon(applet->hInstance, MAKEINTRESOURCE(icon_id)); icon->nid.uCallbackMessage = WM_TRAYNOTIFY; wchar_t *tip_w = L"Seafile"; wmemcpy (icon->nid.szTip, tip_w, wcslen(tip_w)); icon->nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; return Shell_NotifyIconW(NIM_ADD, &(icon->nid)); }
BOOL CMainWindow::AddTrayIcon(void) { NOTIFYICONDATAW nid; HICON hIcon = NULL; WCHAR szTip[128]; BOOL bRetVal; ZeroMemory(&nid, sizeof(NOTIFYICONDATAW)); hIcon = LoadIconW(g_hInstance, MAKEINTRESOURCEW(IDI_DISPLAYSLEEP)); nid.cbSize = sizeof(NOTIFYICONDATAW); nid.hWnd = m_hMainWnd; nid.uID = 0; nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; nid.uCallbackMessage = WM_ONTRAYICON; nid.hIcon = hIcon; LoadStringW(g_hInstance, IDS_TRAYTIP, szTip, 64); wcscpy_s(nid.szTip, 128, szTip); bRetVal = Shell_NotifyIconW(NIM_ADD, &nid); if (hIcon) DestroyIcon(hIcon); return bRetVal; }
BOOL TrayIcon_ShellUpdateTrayIcon(void) { NOTIFYICONDATAW nid; HICON hIcon = NULL; BOOL bRetVal; WCHAR wszCPU_Usage[] = {'C','P','U',' ','U','s','a','g','e',':',' ','%','d','%','%',0}; memset(&nid, 0, sizeof(NOTIFYICONDATAW)); hIcon = TrayIcon_GetProcessorUsageIcon(); nid.cbSize = sizeof(NOTIFYICONDATAW); nid.hWnd = hMainWnd; nid.uID = 0; nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; nid.uCallbackMessage = WM_ONTRAYICON; nid.hIcon = hIcon; wsprintfW(nid.szTip, wszCPU_Usage, PerfDataGetProcessorUsage()); bRetVal = Shell_NotifyIconW(NIM_MODIFY, &nid); if (hIcon) DestroyIcon(hIcon); return bRetVal; }
bool DockWnd::showBalloon() { if (m_queue.empty()) return false; BalloonItem &item = m_queue.front(); __NOTIFYICONDATAW notifyIconData; memset(¬ifyIconData, 0, sizeof(notifyIconData)); notifyIconData.cbSize = sizeof(notifyIconData); notifyIconData.hWnd = winId(); notifyIconData.uFlags = NIF_INFO; notifyIconData.uTimeout = TIP_TIMEOUT; unsigned i; unsigned size = item.text.length() + 1; if (size >= sizeof(notifyIconData.szInfo) / sizeof(wchar_t)) size = sizeof(notifyIconData.szInfo) / sizeof(wchar_t) - 1; for (i = 0; i < size; i++) notifyIconData.szInfo[i] = item.text[(int)i].unicode(); notifyIconData.szInfo[size] = 0; size = item.title.length() + 1; if (size >= sizeof(notifyIconData.szInfoTitle) / sizeof(wchar_t)) size = sizeof(notifyIconData.szInfoTitle) / sizeof(wchar_t) - 1; for (i = 0; i < size; i++) notifyIconData.szInfoTitle[i] = item.title[(int)i].unicode(); notifyIconData.szInfoTitle[size] = 0; notifyIconData.dwInfoFlags = item.flags; if (!Shell_NotifyIconW(NIM_MODIFY, (NOTIFYICONDATAW*)¬ifyIconData)){ m_queue.erase(m_queue.begin()); return false; } return true; }
/** Creates a tray baloon popup with the message, and flashes the main window * * accepts: char *title, title length, char *msg, msg length; * returns void; */ void notify(char *title, uint16_t title_length, const char *msg, uint16_t msg_length, void *UNUSED(object), bool UNUSED(is_group)) { if (have_focus || self.status == 2) { return; } FlashWindow(main_window.window, true); flashing = true; NOTIFYICONDATAW nid = { .cbSize = sizeof(nid), .hWnd = main_window.window, .uFlags = NIF_ICON | NIF_INFO, .hIcon = unread_messages_icon, .uTimeout = 5000, .dwInfoFlags = 0, }; uint16_t title_len = safe_shrink(title, title_length, MAX_TITLE_LENGTH); utf8tonative(title, nid.szInfoTitle, title_len); uint16_t msg_len = safe_shrink(msg, msg_length, MAX_MSG_LENGTH); utf8tonative(msg, nid.szInfo, msg_len); Shell_NotifyIconW(NIM_MODIFY, &nid); } static void redraw_notify(UTOX_WINDOW *win) { LOG_TRACE("Notify", "redraw start"); native_window_set_target(win); panel_draw(win->_.panel, 0, 0, win->_.w, win->_.h); SelectObject(win->draw_DC, win->draw_BM); BitBlt(win->window_DC, win->_.x, win->_.y, win->_.w, win->_.h, win->draw_DC, win->_.x, win->_.y, SRCCOPY); LOG_TRACE("Notify", "redraw end"); }
BOOL TrayIcon_ShellUpdateTrayIcon(void) { NOTIFYICONDATAW nid; HICON hIcon = NULL; BOOL bRetVal; WCHAR wszCPU_Usage[255]; LoadStringW(hInst, IDS_STATUS_BAR_CPU_USAGE, wszCPU_Usage, sizeof(wszCPU_Usage)/sizeof(WCHAR)); memset(&nid, 0, sizeof(NOTIFYICONDATAW)); hIcon = TrayIcon_GetProcessorUsageIcon(); nid.cbSize = sizeof(NOTIFYICONDATAW); nid.hWnd = hMainWnd; nid.uID = 0; nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; nid.uCallbackMessage = WM_ONTRAYICON; nid.hIcon = hIcon; wsprintfW(nid.szTip, wszCPU_Usage, PerfDataGetProcessorUsage()); bRetVal = Shell_NotifyIconW(NIM_MODIFY, &nid); if (hIcon) DestroyIcon(hIcon); return bRetVal; }
void CTrayIcon::DestroyTrayIcon() { if (!m_bTrayIconExists) return; m_pNID->uFlags = 0; m_pNID->dwInfoFlags = 0; Shell_NotifyIconW(NIM_DELETE, m_pNID); m_bTrayIconExists = false; }
int fnCListTrayNotify(MIRANDASYSTRAYNOTIFY* msn) { if (msn == NULL) return 1; if (msn->cbSize != sizeof(MIRANDASYSTRAYNOTIFY) || msn->szInfo == NULL || msn->szInfoTitle == NULL) return 1; if (cli.trayIcon == NULL) return 2; UINT iconId = 0; if (msn->szProto) { for (int j = 0; j < cli.trayIconCount; j++) { if (cli.trayIcon[j].szProto != NULL) { if (!strcmp(msn->szProto, cli.trayIcon[j].szProto)) { iconId = cli.trayIcon[j].id; break; } } else if (cli.trayIcon[j].isBase) { iconId = cli.trayIcon[j].id; break; } } } else iconId = cli.trayIcon[0].id; if (msn->dwInfoFlags & NIIF_INTERN_UNICODE) { NOTIFYICONDATAW nid = { 0 }; nid.cbSize = (cli.shellVersion >= 5) ? NOTIFYICONDATAW_V2_SIZE : NOTIFYICONDATAW_V1_SIZE; nid.hWnd = cli.hwndContactList; nid.uID = iconId; nid.uFlags = NIF_INFO; mir_wstrncpy(nid.szInfo, msn->tszInfo, SIZEOF(nid.szInfo)); mir_wstrncpy(nid.szInfoTitle, msn->tszInfoTitle, SIZEOF(nid.szInfoTitle)); nid.szInfo[SIZEOF(nid.szInfo) - 1] = 0; nid.szInfoTitle[SIZEOF(nid.szInfoTitle) - 1] = 0; nid.uTimeout = msn->uTimeout; nid.dwInfoFlags = (msn->dwInfoFlags & ~NIIF_INTERN_UNICODE); return Shell_NotifyIconW(NIM_MODIFY, &nid) == 0; } else { NOTIFYICONDATAA nid = { 0 }; nid.cbSize = (cli.shellVersion >= 5) ? NOTIFYICONDATAA_V2_SIZE : NOTIFYICONDATAA_V1_SIZE; nid.hWnd = cli.hwndContactList; nid.uID = iconId; nid.uFlags = NIF_INFO; strncpy_s(nid.szInfo, msn->szInfo, _TRUNCATE); strncpy_s(nid.szInfoTitle, msn->szInfoTitle, _TRUNCATE); nid.uTimeout = msn->uTimeout; nid.dwInfoFlags = msn->dwInfoFlags; return Shell_NotifyIconA(NIM_MODIFY, &nid) == 0; } }
void Hide() { EDITINFO ei; const wchar_t *wpFileName=NULL; //Get tip if (SendMessage(hMainWnd, AKD_GETEDITINFO, (WPARAM)NULL, (LPARAM)&ei)) { if (*ei.wszFile) wpFileName=GetFileName(ei.wszFile, -1); } xprintfW(wszBuffer, L"%s%s%s", wpFileName, wpFileName?L" - ":NULL, L"AkelPad"); if (bOldWindows) { NOTIFYICONDATAA nid; //Set tip WideCharToMultiByte(CP_ACP, 0, wszBuffer, -1, nid.szTip, 64, NULL, NULL); nid.szTip[63]='\0'; //Add notify icon nid.cbSize=sizeof(nid); nid.hWnd=hMainWnd; nid.uID=0; nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP; nid.uCallbackMessage=nMinimizeToTrayMessage; nid.hIcon=(HICON)hMainSmallIcon; Shell_NotifyIconA(NIM_ADD, &nid); } else { NOTIFYICONDATAW nid; //Set tip xstrcpynW(nid.szTip, wszBuffer, 64); //Add notify icon nid.cbSize=sizeof(nid); nid.hWnd=hMainWnd; nid.uID=0; nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP; nid.uCallbackMessage=nMinimizeToTrayMessage; nid.hIcon=(HICON)hMainSmallIcon; Shell_NotifyIconW(NIM_ADD, &nid); } if (!bCmdShow) { //Hide main window ShowWindow(hMainWnd, SW_MINIMIZE); ShowWindow(hMainWnd, SW_HIDE); } }
/************************************************************************* * Shell_NotifyIcon [SHELL32.296] * Shell_NotifyIconA [SHELL32.297] */ BOOL WINAPI Shell_NotifyIconA(DWORD dwMessage, PNOTIFYICONDATAA pnid) { NOTIFYICONDATAW nidW; INT cbSize; /* Validate the cbSize as Windows XP does */ if (pnid->cbSize != NOTIFYICONDATAA_V1_SIZE && pnid->cbSize != NOTIFYICONDATAA_V2_SIZE && pnid->cbSize != NOTIFYICONDATAA_V3_SIZE && pnid->cbSize != sizeof(NOTIFYICONDATAA)) { WARN("Invalid cbSize (%d) - using only Win95 fields (size=%d)\n", pnid->cbSize, NOTIFYICONDATAA_V1_SIZE); cbSize = NOTIFYICONDATAA_V1_SIZE; } else cbSize = pnid->cbSize; ZeroMemory(&nidW, sizeof(nidW)); nidW.cbSize = sizeof(nidW); nidW.hWnd = pnid->hWnd; nidW.uID = pnid->uID; nidW.uFlags = pnid->uFlags; nidW.uCallbackMessage = pnid->uCallbackMessage; nidW.hIcon = pnid->hIcon; /* szTip */ if (pnid->uFlags & NIF_TIP) MultiByteToWideChar(CP_ACP, 0, pnid->szTip, -1, nidW.szTip, sizeof(nidW.szTip)/sizeof(WCHAR)); if (cbSize >= NOTIFYICONDATAA_V2_SIZE) { nidW.dwState = pnid->dwState; nidW.dwStateMask = pnid->dwStateMask; /* szInfo, szInfoTitle */ if (pnid->uFlags & NIF_INFO) { MultiByteToWideChar(CP_ACP, 0, pnid->szInfo, -1, nidW.szInfo, sizeof(nidW.szInfo)/sizeof(WCHAR)); MultiByteToWideChar(CP_ACP, 0, pnid->szInfoTitle, -1, nidW.szInfoTitle, sizeof(nidW.szInfoTitle)/sizeof(WCHAR)); } nidW.u.uTimeout = pnid->u.uTimeout; nidW.dwInfoFlags = pnid->dwInfoFlags; } if (cbSize >= NOTIFYICONDATAA_V3_SIZE) nidW.guidItem = pnid->guidItem; if (cbSize >= sizeof(NOTIFYICONDATAA)) nidW.hBalloonIcon = pnid->hBalloonIcon; return Shell_NotifyIconW(dwMessage, &nidW); }
void DockWnd::setIcon(const char *icon) { #ifndef WIN32 #if !defined(QT_MACOSX_VERSION) && !defined(QT_MAC) if (wharfIcon){ wharfIcon->set(m_state, bBlink ? m_unread : NULL); repaint(); return; } #endif #endif drawIcon = Pict(icon); #ifndef WIN32 #if !defined(QT_MACOSX_VERSION) && !defined(QT_MAC) if (!inTray){ repaint(); return; } #endif #endif #ifdef WIN32 QWidget::setIcon(drawIcon); if (IsWindowUnicode(winId())){ __NOTIFYICONDATAW notifyIconData; memset(¬ifyIconData, 0, sizeof(notifyIconData)); notifyIconData.cbSize = sizeof(notifyIconData); notifyIconData.hIcon = topData()->winIcon; notifyIconData.hWnd = winId(); notifyIconData.uFlags = NIF_ICON; Shell_NotifyIconW(NIM_MODIFY, (NOTIFYICONDATAW*)¬ifyIconData); }else{ __NOTIFYICONDATAA notifyIconData; memset(¬ifyIconData, 0, sizeof(notifyIconData)); notifyIconData.cbSize = sizeof(notifyIconData); notifyIconData.hIcon = topData()->winIcon; notifyIconData.hWnd = winId(); notifyIconData.uFlags = NIF_ICON; Shell_NotifyIconA(NIM_MODIFY, (NOTIFYICONDATAA*)¬ifyIconData); } #else #if !defined(QT_MACOSX_VERSION) && !defined(QT_MAC) if (wharfIcon) return; #endif // from PSI: // thanks to Robert Spier for this: // for some reason the repaint() isn't being honored, or isn't for // the icon. So force one on the widget behind the icon erase(); QPaintEvent pe( rect() ); paintEvent(&pe); #endif }
void DockWnd::setTip(const char *text) { m_tip = text; QString tip = m_unreadText; if (tip.isEmpty()){ tip = i18n(text); tip = tip.replace(QRegExp("\\&"), ""); } #ifdef WIN32 if (IsWindowUnicode(winId())){ __NOTIFYICONDATAW notifyIconData; memset(¬ifyIconData, 0, sizeof(notifyIconData)); notifyIconData.cbSize = sizeof(notifyIconData); notifyIconData.hIcon = topData()->winIcon; notifyIconData.hWnd = winId(); unsigned size = tip.length(); if (size >= sizeof(notifyIconData.szTip) / sizeof(wchar_t)) size = sizeof(notifyIconData.szTip) / sizeof(wchar_t) - 1; memcpy(notifyIconData.szTip, tip.unicode(), size * sizeof(wchar_t)); notifyIconData.uFlags = NIF_TIP; Shell_NotifyIconW(NIM_MODIFY, (NOTIFYICONDATAW*)¬ifyIconData); }else{ __NOTIFYICONDATAA notifyIconData; memset(¬ifyIconData, 0, sizeof(notifyIconData)); notifyIconData.cbSize = sizeof(notifyIconData); notifyIconData.hIcon = topData()->winIcon; notifyIconData.hWnd = winId(); strncpy(notifyIconData.szTip, tip.local8Bit(), sizeof(notifyIconData.szTip)); notifyIconData.uFlags = NIF_TIP; Shell_NotifyIconA(NIM_MODIFY, (NOTIFYICONDATAA*)¬ifyIconData); } #else #if !defined(QT_MACOSX_VERSION) && !defined(QT_MAC) if (wharfIcon == NULL){ if (isVisible()){ #endif QToolTip::remove(this); QToolTip::add(this, tip); #if !defined(QT_MACOSX_VERSION) && !defined(QT_MAC) } }else{ if (wharfIcon->isVisible()){ QToolTip::remove(wharfIcon); QToolTip::add(wharfIcon, tip); } } #endif #endif }
bool CTrayIcon::CreateTrayIcon() { if (m_bTrayIconExists) return true; // The handle to the core.dll is neccessary here, // because Windows will search for the ICON in the executable and not in the DLL // Note: Changing the size will not show a higher quality icon in the balloon auto hIcon = LoadImage(g_hModule, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, LR_DEFAULTSIZE, LR_DEFAULTSIZE, LR_SHARED | LR_LOADTRANSPARENT); m_pNID->hWnd = g_pCore->GetHookedWindow(); m_pNID->uFlags = NIF_ICON | NIF_TIP; m_pNID->hIcon = (hIcon != NULL) ? ((HICON)hIcon) : LoadIcon(NULL, IDI_APPLICATION); m_bTrayIconExists = Shell_NotifyIconW(NIM_ADD, m_pNID) == TRUE; return m_bTrayIconExists; }
BOOL TrayIcon_ShellRemoveTrayIcon(void) { NOTIFYICONDATAW nid; BOOL bRetVal; memset(&nid, 0, sizeof(NOTIFYICONDATAW)); nid.cbSize = sizeof(NOTIFYICONDATAW); nid.hWnd = hMainWnd; nid.uID = 0; nid.uFlags = 0; nid.uCallbackMessage = WM_ONTRAYICON; bRetVal = Shell_NotifyIconW(NIM_DELETE, &nid); return bRetVal; }
BOOL CMainWindow::RemoveTrayIcon(void) { NOTIFYICONDATAW nid; BOOL bRetVal; ZeroMemory(&nid, sizeof(NOTIFYICONDATAW)); nid.cbSize = sizeof(NOTIFYICONDATAW); nid.hWnd = m_hMainWnd; nid.uID = 0; nid.uFlags = 0; nid.uCallbackMessage = WM_ONTRAYICON; bRetVal = Shell_NotifyIconW(NIM_DELETE, &nid); return bRetVal; }
void DockWnd::quit() { #ifdef WIN32 if (IsWindowUnicode(winId())){ __NOTIFYICONDATAW notifyIconData; memset(¬ifyIconData, 0, sizeof(notifyIconData)); notifyIconData.cbSize = sizeof(notifyIconData); notifyIconData.hWnd = winId(); Shell_NotifyIconW(NIM_DELETE, (NOTIFYICONDATAW*)¬ifyIconData); }else{ __NOTIFYICONDATAA notifyIconData; memset(¬ifyIconData, 0, sizeof(notifyIconData)); notifyIconData.cbSize = sizeof(notifyIconData); notifyIconData.hWnd = winId(); Shell_NotifyIconA(NIM_DELETE, (NOTIFYICONDATAA*)¬ifyIconData); } #endif }
void trayicon_set_tooltip (SeafileTrayIcon *icon, char *tooltip, int balloon, char *title, unsigned int timeout) { wchar_t *tip_w = NULL; wchar_t *title_w = NULL; if (tooltip) { tip_w = wchar_from_utf8 (tooltip ? tooltip : ""); if (!tip_w) { goto out; } } if (title) { title_w = wchar_from_utf8 (title ? title : ""); if (!title_w) { goto out; } } icon->nid.cbSize = sizeof(NOTIFYICONDATAW); if (balloon) { icon->nid.uFlags = NIF_INFO; icon->nid.uTimeout = timeout; icon->nid.dwInfoFlags = NIIF_INFO; safe_wcsncpy (icon->nid.szInfo, tip_w, sizeof(icon->nid.szInfo) / sizeof(wchar_t)); safe_wcsncpy (icon->nid.szInfoTitle, title_w, sizeof(icon->nid.szInfoTitle) / sizeof(wchar_t)); } else { icon->nid.uFlags = NIF_TIP; safe_wcsncpy (icon->nid.szInfo, tip_w, sizeof(icon->nid.szInfo) / sizeof(wchar_t)); } Shell_NotifyIconW(NIM_MODIFY, &(icon->nid)); out: g_free (tip_w); g_free (title_w); }
void DockWnd::setIcon(const char *icon) { #ifndef WIN32 #if !defined(QT_MACOSX_VERSION) && !defined(QT_MAC) if (wharfIcon) wharfIcon->set(icon, NULL); #endif #endif drawIcon = Pict(icon); #ifndef WIN32 #if !defined(QT_MACOSX_VERSION) && !defined(QT_MAC) if (!inTray){ repaint(); return; } #endif #endif #ifdef WIN32 QWidget::setIcon(drawIcon); if (IsWindowUnicode(winId())){ __NOTIFYICONDATAW notifyIconData; memset(¬ifyIconData, 0, sizeof(notifyIconData)); notifyIconData.cbSize = sizeof(notifyIconData); notifyIconData.hIcon = topData()->winIcon; notifyIconData.hWnd = winId(); notifyIconData.uFlags = NIF_ICON; Shell_NotifyIconW(NIM_MODIFY, (NOTIFYICONDATAW*)¬ifyIconData); }else{ __NOTIFYICONDATAA notifyIconData; memset(¬ifyIconData, 0, sizeof(notifyIconData)); notifyIconData.cbSize = sizeof(notifyIconData); notifyIconData.hIcon = topData()->winIcon; notifyIconData.hWnd = winId(); notifyIconData.uFlags = NIF_ICON; Shell_NotifyIconA(NIM_MODIFY, (NOTIFYICONDATAA*)¬ifyIconData); } #else #if !defined(QT_MACOSX_VERSION) && !defined(QT_MAC) if (wharfIcon) return; #endif repaint(); #endif }
static void OnSize(HWND hwnd, UINT state, int cx, int cy) { if (state == SIZE_MINIMIZED) { NOTIFYICONDATAW dta = {}; dta.cbSize = sizeof(NOTIFYICONDATAW); dta.hWnd = hwnd; dta.uID = ID_TRAY; dta.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; dta.uCallbackMessage = WM_SHELLNOTIFY; dta.hIcon = LoadIconW(GetWindowInstance(hwnd), MAKEINTRESOURCEW(ID_ICON1)); std::swprintf(dta.szTip, sizeof dta.szTip / sizeof *dta.szTip, L"D2CS Version " D2CS_VERSION_STRING); Shell_NotifyIconW(NIM_ADD, &dta); ShowWindow(hwnd, SW_HIDE); return; } MoveWindow(ghwndConsole, 0, 0, cx, cy, TRUE); }
// MM-2011-03-24: Added. Displays a balloon popup above the taskbar icon containing the given message and title. void MCSystemBalloonNotification(MCStringRef p_title, MCStringRef p_message) { // Shell_NotifyIconA uses the cbSize of the struct passed to determine what fields have been set // allowing us to use the extended NOTIFYICONDATA500A struct with the extra fields for balloons. NOTIFYICONDATA500W t_nidata; MCMemoryClear(&t_nidata, sizeof(NOTIFYICONDATA500W)); t_nidata . cbSize = sizeof(NOTIFYICONDATA500W); // Fecth the window handle that we have bound the taskbar icon to. // Only one task bar icon has been created within this window hanlde, with ID 1. t_nidata . hWnd = ((MCScreenDC *)MCscreen) -> getinvisiblewindow(); t_nidata . uID = 1; // The NIF_INFO flag determines that the popup should be a balloon rather than a tooltip. // The NIIF_INFO flag determines that the info (little i) icon should be used in the balloon. t_nidata . uFlags = NIF_INFO; t_nidata . dwInfoFlags = NIIF_INFO; MCAutoStringRefAsWString t_title, t_message; // We can specify the title (appears in bold next to the icon) and the body of the balloon. if (p_title != nil) { t_title . Lock(p_title); MCMemoryCopy(t_nidata . szInfoTitle, *t_title, 63 * sizeof(WCHAR)); } else t_nidata . szInfoTitle[0] = '\0'; if (p_message != nil) { t_message . Lock(p_message); MCMemoryCopy(t_nidata . szInfo, *t_message, 255 * sizeof(WCHAR)); } else t_nidata . szInfo[0] = '\0'; // Call with NIM_MODIFY to flag that we want to update an existing taskbar icon. Shell_NotifyIconW(NIM_MODIFY, (PNOTIFYICONDATAW) &t_nidata); }
// // 函数: InitInstance(HINSTANCE, int) // // 目的: 保存实例句柄并创建主窗口 // // 注释: // // 在此函数中,我们在全局变量中保存实例句柄并 // 创建和显示主程序窗口。 // BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWND hWnd; hInst = hInstance; // 将实例句柄存储在全局变量中 hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (!hWnd) { return FALSE; } ShowWindow(hWnd, SW_HIDE); UpdateWindow(hWnd); //对应的类声明文件中定义消息 NOTIFYICONDATAW m_tnid; memset(&m_tnid,0,sizeof(m_tnid)); //OnCreate 函数中return 之前添加托盘生成代码 m_tnid.cbSize=sizeof(NOTIFYICONDATA); m_tnid.hWnd=hWnd; m_tnid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP; m_tnid.uCallbackMessage=MYWM_NOTIFYICON; //用户定义的回调消息 wcscpy_s<128>(m_tnid.szTip,L"v-Judge-Kernel"); m_tnid.uID=NULL; HICON hIcon; hIcon=LoadIcon(hInst,MAKEINTRESOURCE(IDI_ICON2)); m_tnid.hIcon=hIcon; Shell_NotifyIconW(NIM_ADD,&m_tnid); if(hIcon) DestroyIcon(hIcon); return TRUE; }
bool CTrayIcon::CreateTrayBallon(SString strText, eTrayIconType trayIconType, bool useSound) { if (!m_bTrayIconExists) if (!CreateTrayIcon()) return false; auto currentTime = GetTickCount64_(); if ((currentTime - m_llLastBalloonTime) < TRAY_BALLOON_INTERVAL) return false; else m_llLastBalloonTime = currentTime; m_pNID->dwInfoFlags = 0; m_pNID->uFlags = NIF_ICON | NIF_TIP | NIF_INFO; StringCchCopyW(m_pNID->szInfo, ARRAYSIZE(m_pNID->szInfo), SharedUtil::MbUTF8ToUTF16(strText).c_str()); switch (trayIconType) { case ICON_TYPE_INFO: m_pNID->dwInfoFlags |= NIIF_INFO; break; case ICON_TYPE_WARNING: m_pNID->dwInfoFlags |= NIIF_WARNING; break; case ICON_TYPE_ERROR: m_pNID->dwInfoFlags |= NIIF_ERROR; break; case ICON_TYPE_DEFAULT: default: break; } if (!useSound) m_pNID->dwInfoFlags |= NIIF_NOSOUND; return Shell_NotifyIconW(NIM_MODIFY, m_pNID) == TRUE; }
static void trayicon_set_icon (SeafileTrayIcon *icon, HICON hIcon) { int ret; unsigned int msg; HICON prev_icon; if (!hIcon || hIcon == icon->nid.hIcon) return; msg = icon->nid.hIcon? NIM_MODIFY : NIM_ADD; prev_icon = icon->nid.hIcon; icon->nid.hIcon = hIcon; icon->nid.uFlags = NIF_ICON; ret = Shell_NotifyIconW (msg, &icon->nid); if (!ret) { applet_warning ("trayicon_set_icon failed, GLE=%lu\n", GetLastError()); icon->nid.hIcon = prev_icon; } }
/* * Class: sage_Sage * Method: updateTaskbarIcon0 * Signature: (JLjava/lang/String;)V */ JNIEXPORT void JNICALL Java_sage_Sage_updateTaskbarIcon0(JNIEnv *env, jclass jc, jlong jhwnd, jstring tipText) { try { NOTIFYICONDATAW iconData; memset(&iconData, 0, sizeof(iconData)); iconData.cbSize = sizeof(iconData); iconData.hWnd = (HWND) jhwnd; iconData.uID = 110; iconData.uFlags = NIF_TIP | NIF_ICON; const jchar* ctip = env->GetStringChars(tipText, NULL); wcsncpy(iconData.szTip, (const wchar_t*)ctip, sizeof(iconData.szTip) ); WORD iconID = schedulerHasConflicts(env) ? 111 : 110; iconData.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(iconID)); BOOL res = Shell_NotifyIconW(NIM_MODIFY, &iconData); env->ReleaseStringChars(tipText, ctip); } catch (...) { elog((env, "ERROR updating taskbar icon\r\n")); } }
static void NotifyCtl(DWORD action,const wchar_t *pTip,UINT extraFlags) { NOTIFYICONDATAW nid; ZeroFill(&nid,sizeof nid); nid.cbSize=sizeof nid; nid.hWnd=g_hWnd; nid.uID=NOTIFY_ID; nid.uFlags=NIF_ICON|NIF_MESSAGE|extraFlags; nid.uCallbackMessage=NOTIFY_MSG; nid.hIcon=LoadIcon(GetModuleHandle(NULL),MAKEINTRESOURCE(IDI_ICON1)); nid.uTimeout=500; if(pTip) { enum { MAX_TIP_SIZE=sizeof nid.szTip/sizeof nid.szTip[0], MAX_INFO_SIZE=sizeof nid.szInfo/sizeof nid.szInfo[0], MAX_INFO_TITLE_SIZE=sizeof nid.szInfoTitle/sizeof nid.szInfoTitle[0], }; nid.uFlags|=NIF_TIP; lstrcpynW(nid.szTip,pTip,MAX_TIP_SIZE); nid.szTip[MAX_TIP_SIZE-1]=0; lstrcpynW(nid.szInfo,pTip,MAX_INFO_SIZE); nid.szInfo[MAX_INFO_SIZE-1]=0; lstrcpynW(nid.szInfoTitle,L"kbswitch2",MAX_INFO_TITLE_SIZE); nid.szInfoTitle[MAX_INFO_TITLE_SIZE-1]=0; } Shell_NotifyIconW(action,&nid); }
/************************************************************************* * Shell_NotifyIcon [SHELL32.296] * Shell_NotifyIconA [SHELL32.297] */ BOOL WINAPI Shell_NotifyIconA(DWORD dwMessage, PNOTIFYICONDATAA pnid) { NOTIFYICONDATAW nidW; DWORD cbSize, dwValidFlags; /* Initialize and capture the basic data fields */ ZeroMemory(&nidW, sizeof(nidW)); nidW.cbSize = sizeof(nidW); // Use a default size for the moment nidW.hWnd = pnid->hWnd; nidW.uID = pnid->uID; nidW.uFlags = pnid->uFlags; nidW.uCallbackMessage = pnid->uCallbackMessage; nidW.hIcon = pnid->hIcon; /* Validate the structure size and the flags */ cbSize = pnid->cbSize; dwValidFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; if (cbSize == sizeof(NOTIFYICONDATAA)) { nidW.cbSize = sizeof(nidW); dwValidFlags |= NIF_STATE | NIF_INFO | NIF_GUID /* | NIF_REALTIME | NIF_SHOWTIP */; } else if (cbSize == NOTIFYICONDATAA_V3_SIZE) { nidW.cbSize = NOTIFYICONDATAW_V3_SIZE; dwValidFlags |= NIF_STATE | NIF_INFO | NIF_GUID; } else if (cbSize == NOTIFYICONDATAA_V2_SIZE) { nidW.cbSize = NOTIFYICONDATAW_V2_SIZE; dwValidFlags |= NIF_STATE | NIF_INFO; } else // if cbSize == NOTIFYICONDATAA_V1_SIZE or something else { if (cbSize != NOTIFYICONDATAA_V1_SIZE) { WARN("Invalid cbSize (%d) - using only Win95 fields (size=%d)\n", cbSize, NOTIFYICONDATAA_V1_SIZE); cbSize = NOTIFYICONDATAA_V1_SIZE; } nidW.cbSize = NOTIFYICONDATAW_V1_SIZE; } nidW.uFlags &= dwValidFlags; /* Capture the other data fields */ if (nidW.uFlags & NIF_TIP) { /* * Depending on the size of the NOTIFYICONDATA structure * we should convert part of, or all the szTip string. */ if (cbSize <= NOTIFYICONDATAA_V1_SIZE) { #define NIDV1_TIP_SIZE_A (NOTIFYICONDATAA_V1_SIZE - FIELD_OFFSET(NOTIFYICONDATAA, szTip))/sizeof(CHAR) MultiByteToWideChar(CP_ACP, 0, pnid->szTip, NIDV1_TIP_SIZE_A, nidW.szTip, _countof(nidW.szTip)); /* Truncate the string */ nidW.szTip[NIDV1_TIP_SIZE_A - 1] = 0; #undef NIDV1_TIP_SIZE_A } else { MultiByteToWideChar(CP_ACP, 0, pnid->szTip, -1, nidW.szTip, _countof(nidW.szTip)); } } if (cbSize >= NOTIFYICONDATAA_V2_SIZE) { nidW.dwState = pnid->dwState; nidW.dwStateMask = pnid->dwStateMask; nidW.uTimeout = pnid->uTimeout; nidW.dwInfoFlags = pnid->dwInfoFlags; if (nidW.uFlags & NIF_INFO) { MultiByteToWideChar(CP_ACP, 0, pnid->szInfo, -1, nidW.szInfo, _countof(nidW.szInfo)); MultiByteToWideChar(CP_ACP, 0, pnid->szInfoTitle, -1, nidW.szInfoTitle, _countof(nidW.szInfoTitle)); } } if ((cbSize >= NOTIFYICONDATAA_V3_SIZE) && (nidW.uFlags & NIF_GUID)) nidW.guidItem = pnid->guidItem; if (cbSize >= sizeof(NOTIFYICONDATAA)) nidW.hBalloonIcon = pnid->hBalloonIcon; /* Call the unicode function */ return Shell_NotifyIconW(dwMessage, &nidW); }
HRESULT CLanStatus::InitializeNetTaskbarNotifications() { NOTIFYICONDATAW nid; HWND hwndDlg; INetConnectionManager *pNetConMan; IEnumNetConnection *pEnumCon; INetConnection *pNetCon; NETCON_PROPERTIES* pProps; HRESULT hr; ULONG Count; ULONG Index; NOTIFICATION_ITEM * pItem, *pLast = NULL; LANSTATUSUI_CONTEXT * pContext; TRACE("InitializeNetTaskbarNotifications\n"); if (m_pHead) { pItem = m_pHead; while (pItem) { hr = pItem->pNet->GetProperties(&pProps); if (SUCCEEDED(hr)) { ZeroMemory(&nid, sizeof(nid)); nid.cbSize = sizeof(nid); nid.uID = pItem->uID; nid.hWnd = pItem->hwndDlg; nid.uFlags = NIF_STATE; if (pProps->dwCharacter & NCCF_SHOW_ICON) nid.dwState = 0; else nid.dwState = NIS_HIDDEN; nid.dwStateMask = NIS_HIDDEN; Shell_NotifyIconW(NIM_MODIFY, &nid); NcFreeNetconProperties(pProps); } pItem = pItem->pNext; } return S_OK; } /* get an instance to of IConnectionManager */ //hr = CoCreateInstance(&CLSID_ConnectionManager, NULL, CLSCTX_INPROC_SERVER, &IID_INetConnectionManager, (LPVOID*)&pNetConMan); hr = INetConnectionManager_Constructor(NULL, IID_INetConnectionManager, (LPVOID*)&pNetConMan); if (FAILED(hr)) { ERR("INetConnectionManager_Constructor failed\n"); return hr; } hr = pNetConMan->EnumConnections(NCME_DEFAULT, &pEnumCon); if (FAILED(hr)) { ERR("EnumConnections failed\n"); pNetConMan->Release(); return hr; } Index = 1; do { hr = pEnumCon->Next(1, &pNetCon, &Count); if (hr == S_OK) { TRACE("new connection\n"); pItem = static_cast<NOTIFICATION_ITEM*>(CoTaskMemAlloc(sizeof(NOTIFICATION_ITEM))); if (!pItem) break; pContext = static_cast<LANSTATUSUI_CONTEXT*>(CoTaskMemAlloc(sizeof(LANSTATUSUI_CONTEXT))); if (!pContext) { CoTaskMemFree(pItem); break; } ZeroMemory(pContext, sizeof(LANSTATUSUI_CONTEXT)); pContext->uID = Index; pContext->pNet = pNetCon; pItem->uID = Index; pItem->pNext = NULL; pItem->pNet = pNetCon; hwndDlg = CreateDialogParamW(netshell_hInstance, MAKEINTRESOURCEW(IDD_STATUS), NULL, LANStatusDlg, (LPARAM)pContext); if (hwndDlg) { ZeroMemory(&nid, sizeof(nid)); nid.cbSize = sizeof(nid); nid.uID = Index++; nid.uFlags = NIF_MESSAGE; nid.uVersion = 3; nid.uCallbackMessage = WM_SHOWSTATUSDLG; nid.hWnd = hwndDlg; hr = pNetCon->GetProperties(&pProps); if (SUCCEEDED(hr)) { CopyMemory(&pItem->guidItem, &pProps->guidId, sizeof(GUID)); if (!(pProps->dwCharacter & NCCF_SHOW_ICON)) { nid.dwState = NIS_HIDDEN; nid.dwStateMask = NIS_HIDDEN; nid.uFlags |= NIF_STATE; } if (pProps->Status == NCS_MEDIA_DISCONNECTED || pProps->Status == NCS_DISCONNECTED || pProps->Status == NCS_HARDWARE_DISABLED) nid.hIcon = LoadIcon(netshell_hInstance, MAKEINTRESOURCE(IDI_NET_OFF)); else if (pProps->Status == NCS_CONNECTED) nid.hIcon = LoadIcon(netshell_hInstance, MAKEINTRESOURCE(IDI_NET_IDLE)); if (nid.hIcon) nid.uFlags |= NIF_ICON; wcscpy(nid.szTip, pProps->pszwName); nid.uFlags |= NIF_TIP; } pContext->hwndStatusDlg = hwndDlg; pItem->hwndDlg = hwndDlg; if (Shell_NotifyIconW(NIM_ADD, &nid)) { if (pLast) pLast->pNext = pItem; else m_pHead = pItem; pLast = pItem; Index++; } else { ERR("Shell_NotifyIconW failed\n"); CoTaskMemFree(pItem); } if (nid.uFlags & NIF_ICON) DestroyIcon(nid.hIcon); } else ERR("CreateDialogParamW failed\n"); } } while (hr == S_OK); m_lpNetMan = pNetConMan; pEnumCon->Release(); return S_OK; }
VOID DisableNetworkAdapter(INetConnection * pNet, LANSTATUSUI_CONTEXT * pContext, HWND hwndDlg) { HKEY hKey; NETCON_PROPERTIES * pProperties; LPOLESTR pDisplayName; WCHAR szPath[200]; DWORD dwSize, dwType; LPWSTR pPnp; HDEVINFO hInfo; SP_DEVINFO_DATA DevInfo; SP_PROPCHANGE_PARAMS PropChangeParams; BOOL bClose = FALSE; NOTIFYICONDATAW nid; if (FAILED(pNet->GetProperties(&pProperties))) return; hInfo = SetupDiGetClassDevsW(&GUID_DEVCLASS_NET, NULL, NULL, DIGCF_PRESENT ); if (!hInfo) { NcFreeNetconProperties(pProperties); return; } if (FAILED(StringFromCLSID((CLSID)pProperties->guidId, &pDisplayName))) { NcFreeNetconProperties(pProperties); SetupDiDestroyDeviceInfoList(hInfo); return; } NcFreeNetconProperties(pProperties); if (FindNetworkAdapter(hInfo, &DevInfo, pDisplayName)) { PropChangeParams.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER); PropChangeParams.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE; //; PropChangeParams.StateChange = DICS_DISABLE; PropChangeParams.Scope = DICS_FLAG_CONFIGSPECIFIC; PropChangeParams.HwProfile = 0; if (SetupDiSetClassInstallParams(hInfo, &DevInfo, &PropChangeParams.ClassInstallHeader, sizeof(SP_PROPCHANGE_PARAMS))) { if (SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hInfo, &DevInfo)) bClose = TRUE; } } SetupDiDestroyDeviceInfoList(hInfo); swprintf(szPath, L"SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\%s\\Connection", pDisplayName); CoTaskMemFree(pDisplayName); if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, szPath, 0, KEY_READ, &hKey) != ERROR_SUCCESS) return; dwSize = 0; if (RegQueryValueExW(hKey, L"PnpInstanceID", NULL, &dwType, NULL, &dwSize) != ERROR_SUCCESS || dwType != REG_SZ) { RegCloseKey(hKey); return; } pPnp = static_cast<PWSTR>(CoTaskMemAlloc(dwSize)); if (!pPnp) { RegCloseKey(hKey); return; } if (RegQueryValueExW(hKey, L"PnpInstanceID", NULL, &dwType, (LPBYTE)pPnp, &dwSize) != ERROR_SUCCESS) { CoTaskMemFree(pPnp); RegCloseKey(hKey); return; } RegCloseKey(hKey); swprintf(szPath, L"System\\CurrentControlSet\\Hardware Profiles\\Current\\System\\CurrentControlSet\\Enum\\%s", pPnp); CoTaskMemFree(pPnp); if (RegCreateKeyExW(HKEY_LOCAL_MACHINE, szPath, 0, NULL, 0, KEY_WRITE, NULL, &hKey, NULL) != ERROR_SUCCESS) return; dwSize = 1; /* enable = 0, disable = 1 */ RegSetValueExW(hKey, L"CSConfigFlags", 0, REG_DWORD, (LPBYTE)&dwSize, sizeof(DWORD)); RegCloseKey(hKey); if (!bClose) return; PropSheet_PressButton(GetParent(hwndDlg), PSBTN_CANCEL); ZeroMemory(&nid, sizeof(nid)); nid.cbSize = sizeof(nid); nid.uID = pContext->uID; nid.hWnd = pContext->hwndDlg; nid.uFlags = NIF_STATE; nid.dwState = NIS_HIDDEN; nid.dwStateMask = NIS_HIDDEN; Shell_NotifyIconW(NIM_MODIFY, &nid); }