public void RemoveItem(SystemMenuItem item)
 {
     if (Items.Contains(item))
     {
         Items.Remove(item);
         DeleteMenu(MenuHandle, item.ID, 0x0000);
     }
 }
        public static int CopyToolStripToMenu(ToolStrip menuStrip, SystemMenu systemMenu, int currentId = 0)
        {
            foreach (ToolStripItem item in menuStrip.Items)
            {
                if (item is ToolStripMenuItem menuItem)
                {
                    SystemMenuItemFlags flags = SystemMenuItemFlags.Default;
                    if (menuItem.Checked)
                    {
                        flags |= SystemMenuItemFlags.Checked;
                    }
                    if (!menuItem.Enabled)
                    {
                        flags |= SystemMenuItemFlags.Disabled;
                    }
                    if (menuItem.HasDropDownItems)
                    {
                        flags |= SystemMenuItemFlags.Popup;
                    }

                    SystemMenuItem systemMenuItem;
                    if (menuItem.Image != null)
                    {
                        flags         |= SystemMenuItemFlags.Bitmap;
                        systemMenuItem = new SystemMenuItem(menuItem.Text, menuItem.PerformClick, flags, menuItem.Image);
                    }
                    else
                    {
                        systemMenuItem = new SystemMenuItem(menuItem.Text, menuItem.PerformClick, flags);
                    }
                    systemMenuItem.ID = currentId;

                    if (menuItem.HasDropDownItems)
                    {
                        SystemMenu subMenu = new SystemMenu(true);
                        currentId = CopyToolStripToMenu(menuItem.DropDown, subMenu, currentId);
                        systemMenuItem.SubMenu = subMenu;
                        systemMenuItem.ID      = subMenu.MenuHandle.ToInt32();
                    }
                    else
                    {
                        currentId++;
                    }

                    systemMenu.AddItem(systemMenuItem);
                }
                else if (item is ToolStripSeparator seperator)
                {
                    systemMenu.AddItem(new SystemMenuItem("", new Action(() => { }), SystemMenuItemFlags.IsSeperator));
                }
            }
            return(currentId);
        }
        public void AddItem(SystemMenuItem item)
        {
            Items.Add(item);

            if (item.MenuItemFlags.HasFlag(SystemMenuItemFlags.Bitmap))
            {
                AppendMenu(MenuHandle, item.MenuItemFlags, item.ID, item.Image.GetHbitmap());
            }
            else
            {
                AppendMenu(MenuHandle, item.MenuItemFlags, item.ID, item.Text);
            }
        }
        public void PerformAction(int itemId)
        {
            IEnumerable <SystemMenu> subMenus = Items.Where(a => a.MenuItemFlags.HasFlag(SystemMenuItemFlags.Popup)).Select(a => a.SubMenu);

            foreach (SystemMenu subMenu in subMenus)
            {
                subMenu.PerformAction(itemId);
            }

            IEnumerable <SystemMenuItem> items = Items.Where(a => a.ID == itemId);

            if (items.Count() > 0)
            {
                SystemMenuItem item = items.First();
                item.OnClick();
            }
        }