欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C# 设置程序启动项

程序员文章站 2022-05-14 08:25:37
托盘图标设置 新建一个NotifyIcon,会在托盘处显示一个图标。 NotifyIcon.Icon可以直接设置一个ico图片,也可以延用原有程序的图标。 notifyIcon.Icon = System.Drawing.Icon.ExtractAssociatedIcon(Application. ......

托盘图标设置

新建一个notifyicon,会在托盘处显示一个图标。

notifyicon.icon可以直接设置一个ico图片,也可以延用原有程序的图标。

notifyicon.icon = system.drawing.icon.extractassociatedicon(application.executablepath);

C# 设置程序启动项
 1     public partial class mainwindow : window
 2     {
 3         private notifyicon notifyicon;
 4 
 5         public mainwindow()
 6         {
 7             initializecomponent();
 8             setnotifyicon();
 9             this.hide();
10         }
11 
12         #region notifyicon
13 
14         private void setnotifyicon()
15         {
16             this.notifyicon = new notifyicon();
17             this.notifyicon.balloontiptext = "磁盘清理工具";
18             this.notifyicon.showballoontip(2000);
19             this.notifyicon.text = "磁盘清理工具:每20天清理一次";
20             this.notifyicon.icon = system.drawing.icon.extractassociatedicon(application.executablepath);
21             this.notifyicon.visible = true;
22             //打开菜单项
23             menuitem open = new menuitem("打开");
24             open.click += new eventhandler(show);
25             //退出菜单项
26             menuitem exit = new menuitem("退出");
27             exit.click += new eventhandler(close);
28             //关联托盘控件
29             menuitem[] childen = new menuitem[] { open, exit };
30             notifyicon.contextmenu = new contextmenu(childen);
31 
32             this.notifyicon.mousedoubleclick += new mouseeventhandler((o, e) =>
33             {
34                 if (e.button == mousebuttons.left) this.show(o, e);
35             });
36         }
37 
38         private void show(object sender, eventargs e)
39         {
40             this.visibility = visibility.visible;
41             this.showintaskbar = true;
42             this.activate();
43         }
44 
45         private void hide(object sender, eventargs e)
46         {
47             this.showintaskbar = false;
48             this.visibility = visibility.hidden;
49         }
50 
51         private void close(object sender, eventargs e)
52         {
53             system.windows.application.current.shutdown();
54         }
55 
56         #endregion
57 
58         #region 窗口
59 
60         private void minimizebutton_onclick(object sender, routedeventargs e)
61         {
62             windowstate = windowstate.minimized;
63         }
64 
65         private void closebutton_onclick(object sender, routedeventargs e)
66         {
67             this.hide();
68         }
69 
70         private void headergrid_onmouseleftbuttondown(object sender, mousebuttoneventargs e)
71         {
72             if (e.buttonstate == mousebuttonstate.pressed)
73             {
74                 this.dragmove();
75             }
76         }
77 
78         #endregion
79     }
view code

禁用多进程启动

1     //禁止双进程
2     bool cancreatenew;
3     using (system.threading.mutex m = new system.threading.mutex(true, system.windows.forms.application.productname, out cancreatenew))
4     {
5         if (!cancreatenew)
6         {
7             this.shutdown();
8         }
9     }

删除原有进程

 1     /// <summary>
 2     /// 删除原有进程
 3     /// </summary>
 4     /// <param name="processname"></param>
 5     private void killprocess(string processname)
 6     {
 7         //得到所有打开的进程   
 8         try
 9         {
10             process currentprocess = process.getcurrentprocess();
11             var processes = process.getprocessesbyname(processname).where(process=> process.id!=currentprocess.id);
12             foreach (process thisproc in processes)
13             {
14                 //找到程序进程,kill之。
15                 if (!thisproc.closemainwindow())
16                 {
17                     thisproc.kill();
18                 }
19             }
20         }
21         catch (exception ex)
22         {
23                 
24         }
25     }

设置开机自启动

 1     private void setappautorun(bool autorun)
 2     {
 3         if (autorun) //设置开机自启动  
 4         {
 6             string path = system.windows.forms.application.executablepath;
 7             registrykey rk = registry.localmachine;
 8             registrykey rk2 = rk.createsubkey(@"software\microsoft\windows\currentversion\run");
 9             rk2.setvalue("jcshutdown", path);
10             rk2.close();
11             rk.close();
12         }
13         else //取消开机自启动  
14         {
16 registrykey rk = registry.localmachine; 17 registrykey rk2 = rk.createsubkey(@"software\microsoft\windows\currentversion\run"); 18 rk2.deletevalue("jcshutdown", false); 19 rk2.close(); 20 rk.close(); 21 } 22 }

app.cs中完整代码:

C# 设置程序启动项
 1     public partial class app : application
 2     {
 3         public app()
 4         {
 5             //禁止双进程
 6             bool cancreatenew;
 7             using (system.threading.mutex m = new system.threading.mutex(true, system.windows.forms.application.productname, out cancreatenew))
 8             {
 9                 if (!cancreatenew)
10                 {
11                     this.shutdown();
12                 }
13             }
14 
15             setappautorun(true);
16 
17             startup += app_startup;
18         }
19 
20         private void setappautorun(bool autorun)
21         {
22             if (autorun) //设置开机自启动  
23             {
24                 messagebox.show("设置开机自启动,需要修改注册表", "提示");  // hovertree.com
25                 string path = system.windows.forms.application.executablepath;
26                 registrykey rk = registry.localmachine;
27                 registrykey rk2 = rk.createsubkey(@"software\microsoft\windows\currentversion\run");
28                 rk2.setvalue("jcshutdown", path);
29                 rk2.close();
30                 rk.close();
31             }
32             else //取消开机自启动  
33             {
34                 messagebox.show("取消开机自启动,需要修改注册表", "提示");
35                 registrykey rk = registry.localmachine;
36                 registrykey rk2 = rk.createsubkey(@"software\microsoft\windows\currentversion\run");
37                 rk2.deletevalue("jcshutdown", false);
38                 rk2.close();
39                 rk.close();
40             }
41         }
42 
43         private void app_startup(object sender, startupeventargs e)
44         {
45             new autocleancachehelper(cleancacheveiwmodel.viewmodel).start();
46         }
47     }
view code