项目需求:

1、程序可以最小化到任务栏

2、tpms标签和限速标签同时只能选择一个,并且要通过button确定修改

3、在程序中需要显示SequenceScanner1.0服务的运行状态

4、能够打开和关闭SequenceScanner1.0服务

5、在程序中建立一个链接,指向配置文件的地址

开发环境:Visual Studio2015基于.NET Framework3.5

实现步骤:

1、以管理员权限,新建一个winform项目,

2、设计程序界面

3、实现程序缩小化至任务栏小图标功能

A、拖动控件notifyIcon到设计界面,修改窗体关闭事件

  1. private void Form1_FormClosing(object sender, FormClosingEventArgs e) //程序关闭时最小化至任务栏
  2. {
  3. if(e.CloseReason==CloseReason.UserClosing) //当用户点击右上角X按钮或者Alt+F4时
  4. {
  5. e.Cancel = true;
  6. this.ShowInTaskbar = false; //判断是否显示窗体
  7. this.myIcon.Icon = this.Icon; //显示任务栏小图标
  8. this.Hide(); //隐藏icon控件
  9. }
  10. }

B、修改notifyIcon的单击事件

  1. private void myIcon_MouseClick(object sender, MouseEventArgs e) //单击任务栏图标事件
  2. {
  3. if(e.Button==MouseButtons.Right) //如果鼠标右击任务栏图标
  4. {
  5. myMenu.Show(); //展示选项
  6. }
  7. if(e.Button==MouseButtons.Left) //如果鼠标左击任务栏图标
  8. {
  9. this.Visible = true;
  10. this.WindowState = FormWindowState.Normal; //显示程序窗体
  11. }
  12. }

C、拖动一个ContextMenuStrip控件作为icon的右键菜单选项,其中设置一个退出选项,修改其click事件

  1. private void 退出ToolStripMenuItem_Click(object sender, EventArgs e) //任务栏图标右击退出程序
  2. {
  3. //弹出提示框,决定是否退出,如果确定就往下执行
  4. if (MessageBox.Show("您确定要退出程序吗?", "确认退出", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.OK)
  5. {
  6. this.myIcon.Visible = false; //任务栏图标消失
  7. this.Close(); //关闭窗体
  8. this.Dispose(); //释放程序使用的资源
  9. Application.Exit(); //退出程序
  10. }
  11. }

4、通过button打开配置文件地址(绝对路径下)

  1. private void openfilepath_Click(object sender, EventArgs e)
  2. {
  3. //这是绝对路径
  4. string path1 = @"C:\Windows\System32"; //地址位置
  5. System.Diagnostics.Process.Start("explorer",path1);
  6. //如有必要可添加为相对路径
  7. }

5、引用能够对服务进行调用的库

6、获取服务状态(输入服务名称)

  1. public void CheckServerState(string ServiceName) //检测服务状态函数
  2. {
  3. ServiceController[] service = ServiceController.GetServices();
  4. bool isStart = false;
  5. bool isExite = false;
  6. for(int i=0;i<service.Length;i++)
  7. {
  8. if(service[i].ServiceName.ToUpper().Equals(ServiceName.ToUpper()))
  9. {
  10. isExite = true;
  11. if(service[i].Status==ServiceControllerStatus.Running)
  12. {
  13. isStart = true;
  14. break;
  15. }
  16. }
  17. }
  18. if(!isExite) //服务是否存在
  19. {
  20. this.ServiceStatus.Text = ("不存在此服务");
  21. }else
  22. {
  23. if(isStart) //服务是否启动
  24. {
  25. this.ServiceStatus.Text = ("此服务已启动");
  26. }
  27. else
  28. {
  29. this.ServiceStatus.Text = ("此服务已关闭");
  30. }
  31. }
  32. }
  33. private void getServerStatus_Click(object sender, EventArgs e) //服务检测
  34. {
  35. // CheckServerState("SequenceScanner1.0"); //服务名称,不是显示名称
  36. CheckServerState("iphlpsvc"); //测试用---服务名称,不是显示名称
  37. }

7、打开服务/关闭服务(输入显示名称)

打开服务

  1. //首先根据服务状态决定打开/关闭服务
  2. if (ServiceStatus.Text == "不存在此服务")
  3. {
  4. MessageBox.Show("此服务未存在");
  5. }
  6. if (ServiceStatus.Text == "此服务已启动")
  7. {
  8. MessageBox.Show("服务已启动");
  9. }
  10. if (ServiceStatus.Text == "此服务已关闭")
  11. {
  12. // ServiceController sc = new ServiceController("SequenceScanner1.0");
  13. ServiceController sc = new ServiceController("IP Helper"); //测试服务
  14. if(!sc.CanStop)
  15. {
  16. sc.Start(); //启动服务,不传递参数
  17. sc.WaitForStatus(ServiceControllerStatus.Running); //服务当前状态
  18. ServiceStatus.Text = ("此服务已启动");
  19. }
  20. sc.Close(); //释放对该服务的控制权以及相应的资源
  21. }
  22. }

关闭服务

  1. private void closeService_Click(object sender, EventArgs e) //关闭服务
  2. {
  3. if (ServiceStatus.Text == "不存在此服务")
  4. {
  5. MessageBox.Show("此服务未存在");
  6. }
  7. if (ServiceStatus.Text == "此服务已关闭")
  8. {
  9. MessageBox.Show("服务已关闭");
  10. }
  11. if (ServiceStatus.Text == "此服务已启动")
  12. {
  13. // ServiceController sc = new ServiceController("SequenceScanner1.0");
  14. ServiceController sc = new ServiceController("IP Helper"); //测试服务
  15. if (sc.CanStop)
  16. {
  17. sc.Stop(); //停止服务
  18. sc.WaitForStatus(ServiceControllerStatus.Stopped); //服务当前状态已停止
  19. ServiceStatus.Text = ("此服务已关闭");
  20. }
  21. sc.Close(); //释放对该服务的控制权以及相应的资源
  22. }
  23. }

8、鼠标悬停在帮助按键,显示提示功能

  1. private void help_Click(object sender, EventArgs e) //当鼠标悬停时,启动提示
  2. {
  3. ToolTip ttpSetting = new ToolTip(); //提示控件
  4. ttpSetting.InitialDelay = 50;
  5. ttpSetting.AutoPopDelay = 10 * 1000; //提示可见时间
  6. // ttpSetting.ReshowDelay = 100;
  7. ttpSetting.ShowAlways = true; //是否总显示提示窗口
  8. // ttpSetting.IsBalloon = true;
  9. ttpSetting.SetToolTip(this.help, "联系电话:18914250037"); //显示提示内容
  10. }

附件列表

voith项目配置服务程序的更多相关文章

  1. Project server 2016 “没有为此项目配置网站”错误处理

    问题: 没有为此项目配置网站. There is no site configured for this project 解决办法: 依次点击设置>PWA设置>连接到sharepoint网 ...

  2. thinkphp3.22 多项目配置

    1.index.php if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !'); // 开启调试 ...

  3. VS2010的项目配置

    一直对VS的项目配置都是不怎么了解的,以前用过点,半年不用后,什么都忘记了... 下面这个是免于输入过长的引用头文件的,比如:#include “D:/C++/curl-7.37.0/libcurl/ ...

  4. VC项目配置基础以及快捷键(收藏)

    来自http://blog.csdn.net/phunxm/article/details/5082488 一.IDE基础配置 1.字体 VC6中“Tools→Options→Format→Font” ...

  5. ThinkPHP多应用/项目配置技巧(使用同一配置文件)--(十六)

    原文:ThinkPHP多应用/项目配置技巧(使用同一配置文件)--(十六) ThinkPHP多应用配置技巧(没有使用分组,这是通过入口文件产生的Home.Admin)----很实用! 比如:现在有Ho ...

  6. 理解 IntelliJ IDEA 的项目配置和Web部署

    1.项目配置的理解 IDEA 中最重要的各种设置项,就是这个 Project Structre 了,关乎你的项目运行,缺胳膊少腿都不行.最近公司正好也是用之前自己比较熟悉的IDEA而不是Eclipse ...

  7. 在找一份相对完整的Webpack项目配置指南么?这里有

    Webpack已经出来很久了,相关的文章也有很多,然而比较完整的例子却不是很多,让很多新手不知如何下脚,下脚了又遍地坑 说实话,官方文档是蛮乱的,而且有些还是错的错的..很多配置问题只有爬过坑才知道 ...

  8. ASP.NET Core 项目配置 ( Startup )(转载)

    原文:https://www.twle.cn/l/yufei/aspnetcore/dotnet-aspnet-startup.html 由于是个人网站,怕没了,特意复制保存,个人觉得讲的非常透彻 前 ...

  9. Intellij IDEA导入eclipse项目配置jdk、tomcat到浏览器正常访问

    转发自:博客园---Lindp(大佬写的甚好) 以下是转发的正文 intellij idea中文资料网上比较少,对于eclipse的项目如何导入intellij idea也没有完整的说明,本人在这里整 ...

随机推荐

  1. 大规模实时流处理平台架构-zz

    随着不同网络质量下接入终端设备种类的增多,服务端转码已经成为视频点播和直播产品中必备的能力之一.直播产品讲究时效性,希望在一定的时间内让所有终端看到不同尺寸甚至是不同质量的视频,因此对转码的实时性要求 ...

  2. 揭秘Patchwork APT攻击-恶意软件样本BADNEWS

    1.前言 在2016年左右研究人员发现一个与东南亚和中国南海问题的APT攻击,该APT攻击利用MS Offcie系列漏洞通过钓鱼邮件的形式欺骗受害者点击木马.以美国在内的各国政府和公司为目标发送了大量 ...

  3. PCI学习之总线原理01

    -----------以下资料由网络资料整理而成-------- PCI即Peripheral Component Interconnect,中文的意思是“外围器件互联”. PCI总线支持32位和64 ...

  4. mini2440的程序下载

    mini2440拿到手有四天了,抱着很大的兴趣看韦东山老师的视频,但是因为电脑是win7 64bit的系统,dnw的驱动没有,经查询可以使用supervivi,就查找相关的资料.但是始终弄不好,后来使 ...

  5. C# 日文网址转punnycode

    Uri uri = new Uri(url); IdnMapping idn = new IdnMapping();url= url.Replace(uri.Host, idn.GetAscii(ur ...

  6. 17 Go Slices: usage and internals GO语言切片: 使用和内部

    Go Slices: usage and internals  GO语言切片: 使用和内部 5 January 2011 Introduction Go's slice type provides a ...

  7. TF-池化函数 tf.nn.max_pool 的介绍

    转载自此大神 http://blog.csdn.net/mao_xiao_feng/article/details/53453926 max pooling是CNN当中的最大值池化操作,其实用法和卷积 ...

  8. fsevents npm install是报错

    npm install 安装插件的时候,fsevents报错,这是node 8.x版本的问题,解决办法,把node 版本切换到6.x

  9. BatchNorm caffe源码

    1.计算的均值和方差是channel的 2.test/predict 或者use_global_stats的时候,直接使用moving average use_global_stats 表示是否使用全 ...

  10. C# listView subitem 问本值 text 改变 界面会闪烁

    解决方法 就是重写ListView,然后设置双缓冲即可,然后再使用DoubleBufferListView,就不会闪烁了.下面的代码是DoubleBufferListView,并使用FrmMain来测 ...