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 }
当写的小程序多了,每次找起来也麻烦,就想到写这样一个功能,然后在需要的程序中都加入这样的代码,这样打开任意一个程序时也可以方便的调用其他程序。
当目录下的可执行文件过多时,程序初始化时间会很长,这个可以根据自己需要修改一下