Esempio n. 1
0
        public static int CreateNotifyIcon(INotifyIconCallback messageCallback, Bitmap icon)
        {
            int Id = NotifyIconInteropHelper.nextNotifyIconId++;

            NotifyIconInteropHelper.HookWindow.AddMessageHook(Id, messageCallback);
            NotifyIconInteropHelper.iconHandles.Add(Id, icon.GetHicon());

            NotifyIconData IconData = new NotifyIconData {
                cbSize = Marshal.SizeOf(typeof(NotifyIconData))
            };

            IconData.hwnd             = NotifyIconInteropHelper.HookWindow.Handle;
            IconData.uID              = Id;
            IconData.uFlags           = 0x00000003; // NIF_Message (1), NIF_ICON (2)
            IconData.uCallbackMessage = (int)Win32.Wm.App;
            IconData.hIcon            = NotifyIconInteropHelper.iconHandles[Id];
            IconData.uVersion         = 3; //Window 2000 and later (4 would be Vista and later). Changes message handling!

            NotifyIconInteropHelper.Shell_NotifyIcon(NotifyMessage.Add, ref IconData);
            NotifyIconInteropHelper.Shell_NotifyIcon(NotifyMessage.SetVersion, ref IconData);

            return(Id);
        }
Esempio n. 2
0
 public void AddMessageHook(int id, INotifyIconCallback callback)
 {
     this.registrations.Add(id, new Registration(callback));
 }
Esempio n. 3
0
 public Registration(INotifyIconCallback callback)
 {
     this.Callback          = callback;
     this.LastMousePosition = null;
     this.IsMouseOver       = false;
 }
Esempio n. 4
0
            private IntPtr ProcessMessage(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
            {
                Trace.Assert(hwnd == this.Handle, "Target window unknown");

                if (msg == (int)Win32.Wm.App)
                {
                    int Id      = wParam.ToInt32();
                    int Message = lParam.ToInt32();

                    if (this.registrations.ContainsKey(Id))
                    {
                        Registration        Registration = this.registrations[Id];
                        INotifyIconCallback Callback     = Registration.Callback;
                        try
                        {
                            switch ((Win32.Wm)Message)
                            {
                            case Win32.Wm.Mousemove:
                                Callback.MouseMoved();
//                                    if (this.mouseHook != null)
//                                    {
//                                        Registration.LastMousePosition = null;
//                                        if (Registration.IsMouseOver == false)
//                                        {
//                                            Registration.IsMouseOver = true;
//                                            Callback.MouseEnter();
//                                        }
//                                    }
                                break;

                            case Win32.Wm.Rbuttonup:
                                Callback.MouseButtonUp(MouseButton.Right);
                                break;

                            case Win32.Wm.Rbuttondown:
                                Callback.MouseButtonDown(MouseButton.Right);
                                break;

                            case Win32.Wm.Rbuttondblclk:
                                Callback.MouseButtonDoubleClick(MouseButton.Right);
                                break;

                            case Win32.Wm.Lbuttonup:
                                Callback.MouseButtonUp(MouseButton.Left);
                                break;

                            case Win32.Wm.Lbuttondown:
                                Callback.MouseButtonDown(MouseButton.Left);
                                break;

                            case Win32.Wm.Lbuttondblclk:
                                Callback.MouseButtonDoubleClick(MouseButton.Left);
                                break;

                            case Win32.Wm.Mbuttonup:
                                Callback.MouseButtonUp(MouseButton.Middle);
                                break;

                            case Win32.Wm.Mbuttondown:
                                Callback.MouseButtonDown(MouseButton.Middle);
                                break;

                            case Win32.Wm.Mbuttondblclk:
                                Callback.MouseButtonDoubleClick(MouseButton.Middle);
                                break;

                            case Win32.Wm.Contextmenu:
                                Callback.ContextMenu();
                                break;

                            default:
                                //unknown message ignore
                                break;
                            }
                            handled = true;
                        }
                        // ReSharper disable EmptyGeneralCatchClause
                        catch
                        {
                        }
                        // ReSharper restore EmptyGeneralCatchClause
                        return(IntPtr.Zero);
                    }
                    else
                    {
                        Trace.Fail("Notify Icon Message was received for unknown uID!");
                        return(IntPtr.Zero);
                    }
                }
                else if (msg == this.notificationAreaCreatedMessage)
                {
                    foreach (Registration Registration in this.registrations.Values)
                    {
                        Registration.Callback.RecreationRequired();
                    }
                    return(IntPtr.Zero);
                }
                else
                {
                    return(IntPtr.Zero);
                }
            }
 public NotifyIconInteropWrapper(INotifyIconCallback callback)
 {
     this.callback = callback;
 }