项目需求:

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. 【Python学习笔记】使用Python进行T检验

    使用Python进行T检验 所需要用到的第三方库有scipy. 均可以通过pip直接安装. pip install scipy numpy 引入第三方库 from scipy import stats ...

  2. 渗透测试===kali linux的安装

    方法一: kali linux 安装在本地的vitural box 或者 wm ware中 方法二: 安装在移动硬盘或者储存卡中,插到电脑就能用

  3. Group Normalization笔记

    作者:Yuxin,Wu Kaiming He 机构:Facebook AI Research (FAIR) 摘要:BN是深度学习发展中的一个里程碑技术,它使得各种网络得以训练.然而,在batch维度上 ...

  4. 七、springcloud之配置中心Config(二)之高可用集群

    方案一:传统作法(不推荐) 服务端负载均衡 将所有的Config Server都指向同一个Git仓库,这样所有的配置内容就通过统一的共享文件系统来维护,而客户端在指定Config Server位置时, ...

  5. 使用MongoDB命令工具导出、导入数据

    Windows 10家庭中文版,MongoDB 3.6.3, 前言 在前面的测试中,已经往MongoDB的数据库中写入了一些数据.现在要重新测试程序,数据库中的旧数据需要被清理掉,可是,又想保存之前写 ...

  6. 淘宝开放平台TOP SDK调用对接淘宝或天猫

    如果在淘宝/天猫上开了网店,用户自己也有一套自己的管理平台,这时可能会考虑和淘宝进行数据对接.这就需要考虑调用阿里提供的开发接口来推送和接收数据. 对接的方式有2种,一种是通过http接口,另外一种是 ...

  7. cross apply 和 outer apply

    使用APPLY运算符可以实现查询操作的外部表表达式返回的每个调用表值函数.表值函数作为右输入,外部表表达式作为左输入. 通过对右输入求值来获得左输入每一行的计算结果,生成的行被组合起来作为最终输出.A ...

  8. Vue-Socket.io

    github地址:https://github.com/MetinSeylan/Vue-Socket.io 安装: npm install vue-socket.io -S 注册: import Vu ...

  9. activeMQ 持久化配置

    Mac 中安装activeMQ brew install activemq 启动 activemq start 控制台:在浏览器中输入url: http://localhost:8161/ A:持久化 ...

  10. USACO 5.1 Musical Themes(哈希+二分)

    Musical ThemesBrian Dean A musical melody is represented as a sequence of N (1 <= N <= 5000) n ...