C#开机启动,托盘图标等小功能
1. 开机启动
需要引用第三方库, Windows Script Host Object Model
1 using IWshRuntimeLibrary; 2 using System; 3 using System.Collections.Generic; 4 using System.Diagnostics; 5 using System.IO;
1 // https://www.cnblogs.com/mq0036/p/12117955.html 2 class KFSystemAutoStart 3 { 4 /// <summary> 5 /// 快捷方式名称 6 /// </summary> 7 private const string QuickName = "销售系统工具"; 8 /// <summary> 9 /// 获取系统自启动目录 10 /// </summary> 11 private string systemStartPath 12 { 13 get 14 { 15 return Environment.GetFolderPath(Environment.SpecialFolder.Startup); 16 } 17 } 18 /// <summary> 19 /// 程序完整路径 20 /// </summary> 21 private string appAllPath 22 { 23 get 24 { 25 return Process.GetCurrentProcess().MainModule.FileName; 26 } 27 } 28 /// <summary> 29 /// 桌面目录 30 /// </summary> 31 private string desktopPath 32 { 33 get 34 { 35 return Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); 36 } 37 } 38 39 /// <summary> 40 /// 设置开机自动启动 41 /// </summary> 42 /// <param name="onOff"></param> 43 public void SetMeAutoStart(bool onOff = true) 44 { 45 if (onOff) //开机启动 46 { 47 //获取启动路径应用程序快捷键路径集合 48 List<string> shortcutPaths = GetQuickFromFolder(systemStartPath, appAllPath); 49 //存在两个以上快捷键方式则保留一个快捷方式 50 if(shortcutPaths.Count >= 2) 51 { 52 for(int i=0; i<shortcutPaths.Count; i++) 53 { 54 DeleteFile(shortcutPaths[i]); 55 } 56 }else if(shortcutPaths.Count < 1) 57 { 58 CreateShortcut(systemStartPath, QuickName, appAllPath, "订单自动导入"); 59 } 60 } 61 else //开机不启动 62 { 63 //获取启动路径应用程序快捷方式路径集合 64 List<string> shortcutPaths = GetQuickFromFolder(systemStartPath, appAllPath); 65 //存在快捷方式则遍历删除 66 if(shortcutPaths.Count > 0) 67 { 68 for(int i=0; i<shortcutPaths.Count; i++) 69 { 70 DeleteFile(shortcutPaths[i]); 71 } 72 } 73 } 74 } 75 private bool CreateShortcut(string dir, string shortcutName, string targetPath, string description = null, string iconLocation = null) 76 { 77 try 78 { 79 //目标目录不存在则创建 80 if (!Directory.Exists(dir)) 81 { 82 Directory.CreateDirectory(dir); 83 } 84 //添加应用Com 85 string shortcutPath = Path.Combine(dir, string.Format("{0}.lnk", shortcutName)); //合成路径 86 WshShell shell = new IWshRuntimeLibrary.WshShell(); 87 IWshShortcut shortcut = shell.CreateShortcut(shortcutPath); 88 shortcut.TargetPath = targetPath; 89 shortcut.WorkingDirectory = Path.GetDirectoryName(targetPath); 90 shortcut.WindowStyle = 1; 91 shortcut.Description = description; 92 shortcut.IconLocation = string.IsNullOrWhiteSpace(iconLocation) ? targetPath : iconLocation; 93 shortcut.Save(); 94 return true; 95 } 96 catch (Exception e) 97 { 98 Console.WriteLine(e.Message); 99 throw; 100 } 101 } 102 /// <summary> 103 /// 获取指定目录下指定程序的快捷方式路径集合 104 /// </summary> 105 /// <param name="dir"></param> 106 /// <param name="targetPath"></param> 107 /// <returns></returns> 108 private List<string> GetQuickFromFolder(string dir, string targetPath) 109 { 110 List<string> tempStrs = new List<string>(); 111 tempStrs.Clear(); 112 string tempStr = null; 113 string[] files = Directory.GetFiles(dir, "*.lnk"); 114 if(files == null || files.Length < 1) 115 { 116 return tempStrs; 117 } 118 for(int i=0; i<files.Length; i++) 119 { 120 tempStr = GetAppPathFromQuick(files[i]); 121 if(tempStr == targetPath) 122 { 123 tempStrs.Add(files[i]); 124 } 125 } 126 return tempStrs; 127 } 128 /// <summary> 129 /// 获取快捷方式的目标文件路径-用于判断是否已经开启了自动启动 130 /// </summary> 131 /// <param name="shortcutPath"></param> 132 /// <returns></returns> 133 private string GetAppPathFromQuick(string shortcutPath) 134 { 135 //快捷方式文件的路径 = @"d:\Test.lnk"; 136 if (System.IO.File.Exists(shortcutPath)) 137 { 138 WshShell shell = new WshShell(); 139 IWshShortcut shortct = (IWshShortcut)shell.CreateShortcut(shortcutPath); 140 //快捷方式文件指向的路径.Text = 当前快捷方式文件IWshShortcut类.TargetPath; 141 //快捷方式文件指向的目标目录.Text = 当前快捷方式文件IWshShortcut类.WorkingDirectory; 142 return shortct.TargetPath; 143 } 144 else 145 { 146 return ""; 147 } 148 } 149 /// <summary> 150 /// 根据路径删除文件-用于取消自启时从计算机自启目录删除程序的快捷方式 151 /// </summary> 152 /// <param name="path">路径</param> 153 private void DeleteFile(string path) 154 { 155 FileAttributes attr = System.IO.File.GetAttributes(path); 156 if (attr == FileAttributes.Directory) 157 { 158 Directory.Delete(path, true); 159 } 160 else 161 { 162 System.IO.File.Delete(path); 163 } 164 } 165 /// <summary> 166 /// 在桌面上创建快捷方式-如果需要可以调用 167 /// </summary> 168 /// <param name="desktopPath">桌面地址</param> 169 /// <param name="appPath">应用路径</param> 170 public void CreateDesktopQuick(string desktopPath = "", string quickName = "", string appPath = "") 171 { 172 List<string> shortcutPaths = GetQuickFromFolder(desktopPath, appPath); 173 //如果没有则创建 174 if (shortcutPaths.Count < 1) 175 { 176 CreateShortcut(desktopPath, quickName, appPath, "客服销售订单自动导入"); 177 } 178 } 179 }
调用
1 private void menuAutoStartOn_Click(object sender, EventArgs e) 2 { 3 KFSystemAutoStart auto = new KFSystemAutoStart(); 4 auto.SetMeAutoStart(true); 5 } 6 7 private void menuAutoStartOff_Click(object sender, EventArgs e) 8 { 9 KFSystemAutoStart auto = new KFSystemAutoStart(); 10 auto.SetMeAutoStart(false); 11 }
2. 托盘图标
1 //双击托盘图标 2 private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e) 3 { 4 if (this.WindowState == FormWindowState.Minimized) 5 { 6 WindowState = FormWindowState.Normal; 7 this.Activate(); 8 this.ShowInTaskbar = true; 9 notifyIcon.Visible = true; 10 } 11 } 12 13 //点击最小化,显示托盘图标,隐藏任务栏图标 14 private void KFSystemForm_SizeChanged(object sender, EventArgs e) 15 { 16 if (this.WindowState == FormWindowState.Minimized) 17 { 18 this.ShowInTaskbar = false; 19 notifyIcon.Visible = true; 20 } 21 }
(持续更新中)
作者:无脑仔的小明 出处:http://www.cnblogs.com/wunaozai/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 如果文中有什么错误,欢迎指出。以免更多的人被误导。有需要沟通的,可以站内私信,文章留言,或者关注“无脑仔的小明”公众号私信我。一定尽力回答。 |