winform自动添加同级目录下可执行文件的快捷方式到右键菜单中

时间:2022-03-04 12:48:15
 1    /// <summary>
 2     /// 追加同目录下可执行文件到右键菜单中
 3     /// 在form的Load事件中调用:new clsContextMenuStrip(this.FindForm());
 4     /// </summary>
 5     public class clsContextMenuStrip
 6     {
 7         //窗体
 8         System.Windows.Forms.Form form;
 9         //右键菜单
10         System.Windows.Forms.ContextMenuStrip menu;
11         //当前可执行文件目录
12         string path = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
13         /// <summary>
14         /// 追加同目录下可执行文件到右键菜单中
15         /// 调用方法:new clsContextMenuStrip(this.FindForm());
16         /// </summary>
17         public clsContextMenuStrip(Form f)
18         {
19             form = f;
20             menu = f.Controls.Owner.ContextMenuStrip;
21             if (menu == null)
22             {
23                 menu = new ContextMenuStrip();
24                 form.Controls.Owner.ContextMenuStrip = menu;
25             }
26             Init();
27         }
28         /// <summary>
29         /// 获取当前程序目录下的所有exe,追加到右键菜单中
30         /// </summary>
31         private void Init()
32         {
33             var currExePath = Process.GetCurrentProcess().MainModule.FileName;
34             var files = Directory.GetFileSystemEntries(path, "*.exe", SearchOption.AllDirectories);
35             foreach (var filePath in files)
36             {
37                 //排除本身
38                 if (currExePath.Equals(filePath, StringComparison.CurrentCultureIgnoreCase))
39                     continue;
40                 string name = Path.GetFileNameWithoutExtension(filePath);
41                 //获取exe的图标
42                 Image image = Image.FromHbitmap(Icon.ExtractAssociatedIcon(filePath).ToBitmap().GetHbitmap());
43                 ToolStripMenuItem item = new ToolStripMenuItem();
44                 item.Text = name;
45                 item.Image = image;
46                 item.ToolTipText = filePath;
47                 item.Click += new EventHandler(item_Click);
48                 menu.Items.Add(item);
49             }
50         }
51         //点击时打开程序
52         void item_Click(object sender, EventArgs e)
53         {
54             ToolStripMenuItem item = sender as ToolStripMenuItem;
55             Process.Start(item.ToolTipText);
56         }
57     }

当写的小程序多了,每次找起来也麻烦,就想到写这样一个功能,然后在需要的程序中都加入这样的代码,这样打开任意一个程序时也可以方便的调用其他程序。

当目录下的可执行文件过多时,程序初始化时间会很长,这个可以根据自己需要修改一下