コード例 #1
0
ファイル: MainFrm.cpp プロジェクト: gaozan198912/myproject
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);
	}



}
コード例 #2
0
ファイル: shlnot.c プロジェクト: mingpen/OpenNT
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);
}
コード例 #3
0
ファイル: trayicon.c プロジェクト: pombredanne/seafile
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));
}
コード例 #4
0
ファイル: MainWindow.cpp プロジェクト: wyrover/development
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;
}
コード例 #5
0
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;
}
コード例 #6
0
bool DockWnd::showBalloon()
{
    if (m_queue.empty())
        return false;
    BalloonItem &item = m_queue.front();

    __NOTIFYICONDATAW notifyIconData;
    memset(&notifyIconData, 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*)&notifyIconData)){
        m_queue.erase(m_queue.begin());
        return false;
    }
    return true;
}
コード例 #7
0
ファイル: notify.c プロジェクト: baloo79/uTox
/** 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");
}
コード例 #8
0
ファイル: trayicon.c プロジェクト: bilboed/wine
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;
}
コード例 #9
0
ファイル: CTrayIcon.cpp プロジェクト: ccw808/mtasa-blue
void CTrayIcon::DestroyTrayIcon()
{
    if (!m_bTrayIconExists)
        return;

    m_pNID->uFlags = 0;
    m_pNID->dwInfoFlags = 0;
    Shell_NotifyIconW(NIM_DELETE, m_pNID);
    m_bTrayIconExists = false;
}
コード例 #10
0
ファイル: clisttray.cpp プロジェクト: martok/miranda-ng
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;
	}
}
コード例 #11
0
ファイル: MinimizeToTray.c プロジェクト: embassy/AkelPad
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);
  }
}
コード例 #12
0
ファイル: systray.c プロジェクト: Endle/wine-mirror
/*************************************************************************
 * 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);
}
コード例 #13
0
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(&notifyIconData, 0, sizeof(notifyIconData));
        notifyIconData.cbSize = sizeof(notifyIconData);
        notifyIconData.hIcon = topData()->winIcon;
        notifyIconData.hWnd = winId();
        notifyIconData.uFlags = NIF_ICON;
        Shell_NotifyIconW(NIM_MODIFY, (NOTIFYICONDATAW*)&notifyIconData);
    }else{
        __NOTIFYICONDATAA notifyIconData;
        memset(&notifyIconData, 0, sizeof(notifyIconData));
        notifyIconData.cbSize = sizeof(notifyIconData);
        notifyIconData.hIcon = topData()->winIcon;
        notifyIconData.hWnd = winId();
        notifyIconData.uFlags = NIF_ICON;
        Shell_NotifyIconA(NIM_MODIFY, (NOTIFYICONDATAA*)&notifyIconData);
    }
#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
}
コード例 #14
0
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(&notifyIconData, 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*)&notifyIconData);
    }else{
        __NOTIFYICONDATAA notifyIconData;
        memset(&notifyIconData, 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*)&notifyIconData);
    }
#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
}
コード例 #15
0
ファイル: CTrayIcon.cpp プロジェクト: ccw808/mtasa-blue
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;
}
コード例 #16
0
ファイル: trayicon.c プロジェクト: bilboed/wine
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;
}
コード例 #17
0
ファイル: MainWindow.cpp プロジェクト: wyrover/development
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;
}
コード例 #18
0
void DockWnd::quit()
{
#ifdef WIN32
    if (IsWindowUnicode(winId())){
        __NOTIFYICONDATAW notifyIconData;
        memset(&notifyIconData, 0, sizeof(notifyIconData));
        notifyIconData.cbSize = sizeof(notifyIconData);
        notifyIconData.hWnd = winId();
        Shell_NotifyIconW(NIM_DELETE, (NOTIFYICONDATAW*)&notifyIconData);
    }else{
        __NOTIFYICONDATAA notifyIconData;
        memset(&notifyIconData, 0, sizeof(notifyIconData));
        notifyIconData.cbSize = sizeof(notifyIconData);
        notifyIconData.hWnd = winId();
        Shell_NotifyIconA(NIM_DELETE, (NOTIFYICONDATAA*)&notifyIconData);
    }
#endif
}
コード例 #19
0
ファイル: trayicon.c プロジェクト: pombredanne/seafile
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);
}
コード例 #20
0
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(&notifyIconData, 0, sizeof(notifyIconData));
        notifyIconData.cbSize = sizeof(notifyIconData);
        notifyIconData.hIcon = topData()->winIcon;
        notifyIconData.hWnd = winId();
        notifyIconData.uFlags = NIF_ICON;
        Shell_NotifyIconW(NIM_MODIFY, (NOTIFYICONDATAW*)&notifyIconData);
    }else{
        __NOTIFYICONDATAA notifyIconData;
        memset(&notifyIconData, 0, sizeof(notifyIconData));
        notifyIconData.cbSize = sizeof(notifyIconData);
        notifyIconData.hIcon = topData()->winIcon;
        notifyIconData.hWnd = winId();
        notifyIconData.uFlags = NIF_ICON;
        Shell_NotifyIconA(NIM_MODIFY, (NOTIFYICONDATAA*)&notifyIconData);
    }
#else
#if !defined(QT_MACOSX_VERSION) && !defined(QT_MAC)
    if (wharfIcon)
        return;
#endif
    repaint();
#endif
}
コード例 #21
0
		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);
		}
コード例 #22
0
// 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);
}
コード例 #23
0
ファイル: Judge.cpp プロジェクト: variantf/vJudgeKernel
//
//   函数: 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;
}
コード例 #24
0
ファイル: CTrayIcon.cpp プロジェクト: ccw808/mtasa-blue
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;
}
コード例 #25
0
ファイル: trayicon.c プロジェクト: pombredanne/seafile
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;
    }
}
コード例 #26
0
ファイル: SageTVWin32DLL.cpp プロジェクト: JREkiwi/sagetv
/*
 * 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"));
	}
}
コード例 #27
0
ファイル: kbswitch2.c プロジェクト: ambyte/kbswitch
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);
}
コード例 #28
0
ファイル: systray.cpp プロジェクト: Moteesh/reactos
/*************************************************************************
 * 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);
}
コード例 #29
0
ファイル: lanstatusui.cpp プロジェクト: GYGit/reactos
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;
}
コード例 #30
0
ファイル: lanstatusui.cpp プロジェクト: GYGit/reactos
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);
}