Esempio n. 1
0
        private bool SysTrayCallback(uint message, NOTIFYICONDATA nicData)
        {
            TrayIcon trayIcon = new TrayIcon(nicData.hWnd);

            if (nicData.uID != null)
            {
                trayIcon.UID = nicData.uID;
            }

            lock (_lockObject)
            {
                switch ((NIM)message)
                {
                case NIM.NIM_ADD:
                    // Ensure the icon doesn't already exist.
                    if (TrayIcons.Contains(trayIcon))
                    {
                        return(false);
                    }

                    // Add the icon.
                    trayIcon.Title = nicData.szTip;
                    try
                    {
                        trayIcon.Icon = System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon(nicData.hIcon, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
                    }
                    catch
                    {
                        trayIcon.Icon = null;
                    }
                    trayIcon.HWnd            = nicData.hWnd;
                    trayIcon.UID             = nicData.uID;
                    trayIcon.CallbackMessage = nicData.uCallbackMessage;

                    TrayIcons.Add(trayIcon);
                    break;

                case NIM.NIM_DELETE:
                    try
                    {
                        if (!TrayIcons.Contains(trayIcon))
                        {
                            // Nothing to remove.
                            return(false);
                        }

                        // Woo! Using Linq to avoid iterating!
                        TrayIcons.Remove(trayIcon);
                    }
                    catch (Exception ex)
                    {
                        Trace.WriteLine("Unable to remove the icon from the collection. Error: " + ex.ToString());
                    }
                    break;

                case NIM.NIM_MODIFY:
                    try
                    {
                        bool exists = false;
                        if (TrayIcons.Contains(trayIcon))
                        {
                            exists   = true;
                            trayIcon = TrayIcons.Single(i => i.HWnd == nicData.hWnd && i.UID == nicData.uID);
                        }

                        trayIcon.Title           = nicData.szTip;
                        trayIcon.Icon            = System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon(nicData.hIcon, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
                        trayIcon.HWnd            = nicData.hWnd;
                        trayIcon.UID             = nicData.uID;
                        trayIcon.CallbackMessage = nicData.uCallbackMessage;

                        if (!exists)
                        {
                            TrayIcons.Add(trayIcon);
                        }
                    }
                    catch (Exception ex)
                    {
                        Trace.WriteLine("Unable to modify the icon in the collection. Error: " + ex.ToString());
                    }

                    break;
                }
            }
            return(true);
        }
Esempio n. 2
0
        private bool SysTrayCallback(uint message, NOTIFYICONDATA nicData)
        {
            TrayIcon trayIcon = new TrayIcon((IntPtr)nicData.hWnd);

            trayIcon.UID = nicData.uID;

            lock (_lockObject)
            {
                if ((NIM)message == NIM.NIM_ADD || (NIM)message == NIM.NIM_MODIFY)
                {
                    try
                    {
                        bool exists = false;

                        if (nicData.dwState != 1)
                        {
                            if (TrayIcons.Contains(trayIcon))
                            {
                                exists   = true;
                                trayIcon = TrayIcons.Single(i => i.HWnd == (IntPtr)nicData.hWnd && i.UID == nicData.uID);
                            }

                            trayIcon.Title = nicData.szTip;
                            try
                            {
                                trayIcon.Icon = System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon((IntPtr)nicData.hIcon, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
                            }
                            catch
                            {
                                trayIcon.Icon = AppGrabber.IconImageConverter.GetDefaultIcon();
                            }
                            trayIcon.HWnd            = (IntPtr)nicData.hWnd;
                            trayIcon.UID             = nicData.uID;
                            trayIcon.CallbackMessage = nicData.uCallbackMessage;

                            if (!exists)
                            {
                                if (!Configuration.Settings.SysTrayAlwaysExpanded)
                                {
                                    btnToggle.Visibility = Visibility.Visible;
                                }
                                else
                                {
                                    LayoutRoot.Visibility = Visibility.Visible;
                                }

                                TrayIcons.Add(trayIcon);
                                Trace.WriteLine("Added tray icon: " + trayIcon.Title);
                            }
                            else
                            {
                                Trace.WriteLine("Modified tray icon: " + trayIcon.Title);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Trace.WriteLine("Unable to modify the icon in the collection. Error: " + ex.ToString());
                    }
                }
                else if ((NIM)message == NIM.NIM_DELETE)
                {
                    try
                    {
                        if (!TrayIcons.Contains(trayIcon))
                        {
                            // Nothing to remove.
                            return(false);
                        }

                        // Woo! Using Linq to avoid iterating!
                        TrayIcons.Remove(trayIcon);

                        Trace.WriteLine("Removed tray icon: " + nicData.szTip);

                        if (TrayIcons.Count < 1 && !Configuration.Settings.SysTrayAlwaysExpanded)
                        {
                            btnToggle.Visibility = Visibility.Collapsed;
                        }
                    }
                    catch (Exception ex)
                    {
                        Trace.WriteLine("Unable to remove the icon from the collection. Error: " + ex.ToString());
                    }
                }
            }
            return(true);
        }
Esempio n. 3
0
        private bool SysTrayCallback(uint message, NOTIFYICONDATA nicData)
        {
            Console.WriteLine(message + " - " + nicData.uID);

            lock (_lockObject)
            {
                TrayIcon trayIcon;
                switch ((NIM)message)
                {
                case NIM.NIM_ADD:
                    trayIcon     = new TrayIcon((IntPtr)nicData.hWnd);
                    trayIcon.UID = (uint)nicData.uID;

                    // Ensure the icon doesn't already exist.
                    if (TrayIcons.Contains(trayIcon))
                    {
                        return(false);
                    }

                    // Add the icon.
                    trayIcon.Title = nicData.szTip;
                    try
                    {
                        trayIcon.Icon = System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon((IntPtr)nicData.hIcon, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
                    }
                    catch
                    {
                        trayIcon.Icon = null;
                    }
                    trayIcon.HWnd            = (IntPtr)nicData.hWnd;
                    trayIcon.UID             = (uint)nicData.uID;
                    trayIcon.CallbackMessage = (uint)nicData.uCallbackMessage;

                    TrayIcon old = TrayIcons.FirstOrDefault(i => i.HWnd == (IntPtr)nicData.hWnd);
                    if (old != null)
                    {
                        TrayIcons.Remove(old);
                    }
                    TrayIcons.Add(trayIcon);
                    break;

                case NIM.NIM_DELETE:
                    try
                    {
                        TrayIcon oldTrayIcon = TrayIcons.FirstOrDefault(i => i.HWnd == (IntPtr)nicData.hWnd);
                        if (oldTrayIcon != null)
                        {
                            TrayIcons.Remove(oldTrayIcon);
                        }
                        else
                        {
                            return(false);
                        }
                    }
                    catch (Exception ex)
                    {
                        Trace.WriteLine("Unable to remove the icon from the collection. Error: " + ex.ToString());
                    }
                    break;

                case NIM.NIM_MODIFY:
                    try
                    {
                        trayIcon = TrayIcons.Single(i => i.HWnd == (IntPtr)nicData.hWnd);
                        if (trayIcon == null)
                        {
                            break;
                        }
                        trayIcon.Title           = nicData.szTip;
                        trayIcon.Icon            = System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon((IntPtr)nicData.hIcon, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
                        trayIcon.HWnd            = (IntPtr)nicData.hWnd;
                        trayIcon.UID             = (uint)nicData.uID;
                        trayIcon.CallbackMessage = (uint)nicData.uCallbackMessage;
                        TrayIcons.Remove(trayIcon);
                        TrayIcons.Add(trayIcon);
                    }
                    catch (Exception ex)
                    {
                        Trace.WriteLine("Unable to modify the icon in the collection. Error: " + ex.ToString());
                    }

                    break;
                }
            }
            return(true);
        }