DisplayMagician/HeliosDisplayManagement.ShellExtension/HeliosExecutableMenuExtension.cs
2018-10-20 03:57:25 +03:30

75 lines
3.0 KiB
C#

using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using HeliosDisplayManagement.Shared;
using HeliosDisplayManagement.ShellExtension.Resources;
using SharpShell.Attributes;
using SharpShell.SharpContextMenu;
namespace HeliosDisplayManagement.ShellExtension
{
[ComVisible(true)]
[COMServerAssociation(AssociationType.ClassOfExtension, @".exe")]
internal class HeliosExecutableMenuExtension : SharpContextMenu
{
protected override bool CanShowMenu()
{
return Helios.IsInstalled &&
SelectedItemPaths.Count() == 1 &&
Profile.GetAllProfiles().Any() &&
Path.GetExtension(SelectedItemPaths.First())?.ToLower() == @".exe";
}
protected override ContextMenuStrip CreateMenu()
{
var explorerMenu = new ContextMenuStrip();
var extensionMenu = new ToolStripMenuItem(Language.Open_under_Display_Profile,
Properties.Resources.Icon_x16);
if (Profile.GetAllProfiles().Any())
{
Profile.RefreshActiveStatus();
foreach (var profile in Profile.GetAllProfiles())
{
extensionMenu.DropDownItems.Add(CreateProfileMenu(profile));
}
extensionMenu.DropDownItems.Add(new ToolStripSeparator());
}
extensionMenu.DropDownItems.Add(new ToolStripMenuItem(Language.Manage_Profiles,
Properties.Resources.Icon_x16,
(sender, args) =>
{
HeliosDisplayManagement.Open();
}));
explorerMenu.Items.Add(extensionMenu);
explorerMenu.Items.Add(new ToolStripSeparator());
return explorerMenu;
}
private ToolStripMenuItem CreateProfileMenu(Profile profile)
{
var profileMenu = new ToolStripMenuItem(profile.Name, new ProfileIcon(profile).ToBitmap(16, 16));
profileMenu.DropDownItems.Add(new ToolStripMenuItem(Language.Run, Properties.Resources.Run_x16,
(sender, args) =>
HeliosDisplayManagement.Open(HeliosStartupAction.SwitchProfile, profile,
SelectedItemPaths.FirstOrDefault())));
profileMenu.DropDownItems.Add(new ToolStripMenuItem(Language.Run_as_administrator, Shield.SmallIcon,
(sender, args) =>
HeliosDisplayManagement.Open(HeliosStartupAction.SwitchProfile, profile,
SelectedItemPaths.FirstOrDefault(), true)));
profileMenu.DropDownItems.Add(new ToolStripSeparator());
profileMenu.DropDownItems.Add(new ToolStripMenuItem(Language.Create_Shortcut,
Properties.Resources.Shortcut_x16,
(sender, args) =>
HeliosDisplayManagement.Open(HeliosStartupAction.CreateShortcut, profile,
SelectedItemPaths.FirstOrDefault())));
return profileMenu;
}
}
}