Exemplo n.º 1
0
        private void ShowMenu(ShellItem[] files, bool allFolders)
        {
            CreateHandle(new CreateParams());

            if (EnvironmentHelper.IsWindows10DarkModeSupported)
            {
                NativeMethods.AllowDarkModeForWindow(Handle, true);
            }

            uint selected = Interop.TrackPopupMenuEx(
                nativeMenuPtr,
                TPM.RETURNCMD,
                x,
                y,
                Handle,
                IntPtr.Zero);

            HandleMenuCommand(files, selected, allFolders);

            DestroyHandle();
        }
        private void ShowMenu(ShellFolder folder, IntPtr contextMenu)
        {
            CreateHandle(new CreateParams());

            if (EnvironmentHelper.IsWindows10DarkModeSupported)
            {
                NativeMethods.AllowDarkModeForWindow(Handle, true);
            }

            uint selected = Interop.TrackPopupMenuEx(
                contextMenu,
                TPM.RETURNCMD,
                x,
                y,
                Handle,
                IntPtr.Zero);

            if (selected >= Interop.CMD_FIRST)
            {
                if (selected <= Interop.CMD_LAST)
                {
                    // custom commands are greater than CMD_LAST, so this must be a sub menu item
                    foreach (var subMenu in ShellNewMenus)
                    {
                        if (subMenu.iContextMenu != null)
                        {
                            InvokeCommand(
                                subMenu.iContextMenu,
                                folder.IsFolder && folder.IsFileSystem ? folder.Path : null,
                                selected - Interop.CMD_FIRST,
                                new Point(x, y));
                        }
                    }
                }

                folderItemSelected?.Invoke(selected, folder.Path);
            }

            DestroyHandle();
        }