-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathOpenWithCmd.cs
76 lines (63 loc) · 2.64 KB
/
OpenWithCmd.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
using SharpShell;
using SharpShell.Attributes;
using SharpShell.SharpContextMenu;
using System;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Resources;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace OpenWithCmdExt
{
[ComVisible(true)]
[COMServerAssociation(AssociationType.DirectoryBackground)]
public class OpenWithCMD : SharpContextMenu
{
static string pathToCmdExe = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "cmd.exe"),
admin_icon_res_name = Assembly.GetExecutingAssembly().GetManifestResourceNames().Where(x => x.EndsWith(".png")).First();
protected override bool CanShowMenu()
{
return true;
}
protected override ContextMenuStrip CreateMenu()
{
ContextMenuStrip menuStrip = new ContextMenuStrip();
ToolStripMenuItem menuItem = new ToolStripMenuItem() { Text = resources.StringTable.open_kw };
Icon cmdIcon = Icon.ExtractAssociatedIcon(pathToCmdExe);
menuItem.Image = cmdIcon.ToBitmap();
menuItem.ImageAlign = ContentAlignment.MiddleLeft;
menuItem.ImageScaling = ToolStripItemImageScaling.SizeToFit;
ToolStripMenuItem runAsUserItem = new ToolStripMenuItem() { Text = resources.StringTable.as_user },
runAsAdmin = new ToolStripMenuItem() { Text = resources.StringTable.as_admin };
using(Stream str = Assembly.GetExecutingAssembly().GetManifestResourceStream(admin_icon_res_name))
{
runAsAdmin.Image = Image.FromStream(str);
}
runAsAdmin.ImageAlign = ContentAlignment.MiddleRight;
runAsAdmin.ImageScaling = ToolStripItemImageScaling.SizeToFit;
runAsUserItem.Click += (s, e) => { RunCMD(false); };
runAsAdmin.Click += (s, e) => { RunCMD(true); };
menuItem.DropDownItems.AddRange(new ToolStripItem[] {runAsUserItem, runAsAdmin});
menuStrip.Items.Add(menuItem);
return menuStrip;
}
private void RunCMD(bool asadmin)
{
Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
if(asadmin)
{
cmd.StartInfo.UseShellExecute = true;
cmd.StartInfo.Arguments = $"/k cd /d \"{FolderPath}\"";
cmd.StartInfo.Verb = "runas";
}
else {
cmd.StartInfo.WorkingDirectory = FolderPath;
}
cmd.Start();
}
}
}