【原创】自己动手写工具----签到器[Beta 2.0]
前面的话
上一篇中基本实现了简单的签到任务,但是不够灵活。在上一篇自己动手写工具----签到器的结尾中,我设想了几个新增功能来提高工具的灵活程度,下面把新增功能点列出来看看:
(1)新增其他的进程任务;
(2)任务按照进程进行分类:用IE就是执行IE的任务,与其他(如资源管理器等)无关;
(3)每执行完一个任务关闭任务窗口;
(4)对签到性质的任务进行”已签到“过滤;
(5)实现执行的任务列表自定义;
(6)另外实现任务的可视化;
还是先来看看效果图:

签到器的改进
在上一个版本中,(自己动手写工具----签到器),我们可以自己来添加任务,但是有个最重要的问题,那就是任务列表的可视化。上一版本中,只是针对简单的几个IE任务,所以比较简单,但是随着任务越来越多,有的时候只想执行其中的一些任务而不是所有,这就不可避免地要对任务进行分类处理,这样就可以针对自己选择的任务进行批量执行。就是上面图中左侧的部分啦~~通过勾选需要执行的任务,点击“确定”按钮,你就可以看着任务被一个一个地执行啦~\(≧▽≦)/~
在执行的过程中,如果任务过多就会占用过多的资源(如开启多个IE浏览器进程,上一个版本就是酱紫的... ...),为了解决这个问题,对代码进行小小的优化,每次执行完成一个任务,就会关闭该进程,但是这里有个疑问,希望大神帮忙支支招儿,感激不尽啊~~~~
什么问题呢?就是如果执行任务之前,你已经打开了一个IE进程,那么在启动执行任务后,随着该任务进程的关闭会连同之前的IE进程Kill掉,所以这是个BUG,查了一下资料,大概的意思是获取进程的某个句柄后关闭即可,本人还没有测试,希望大神给指个明路~~
下面是为了避免占用过多的系统资源,而进行改进后的执行代码:
//关闭进程
private void KillProcess(string processName)
{
Process proc = new Process();
foreach (Process item in Process.GetProcessesByName(processName))
{
if (!item.CloseMainWindow())
{
item.Kill();
}
}
}
//执行任务
public void ExcuteTask(TaskModel task)
{
int processID;
ProcessStartInfo ps = new ProcessStartInfo(task.Application, task.Url);
ps.WindowStyle = ProcessWindowStyle.Maximized;
Process myProc =Process.Start(ps);
processID = myProc.Id;
Thread.Sleep((int)numericUpDown2.Value * BASENUM);
//设置鼠标位置
MouseEvents.SetCursorPosition(task.PositionX, task.PositionY);
//模拟鼠标双击
MouseEvents.MouseDbClick();
Thread.Sleep();
KillProcess(task.Application);
}
既然添加了任务分类信息,那么数据的结构就要发生变化了,每个任务多了一个属性,就是所属分类:
private string typeName;
private int typeID;
//任务分类名称
public string TypeName
{
get { return typeName; }
set { typeName = value; }
} //任务ID
public int TypeID
{
get { return typeID; }
set { typeID = value; }
}
数据结构:
<?xml version="1.0" encoding="utf-8"?>
<tasks>
<task>
<taskType>
<taskTypeName>Internet Explore</taskTypeName>
</taskType>
<taskName>百度知道</taskName>
<application>iexplore.exe</application>
<param>http://zhidao.baidu.com/</param>
<position>
<x>1223</x>
<y>298</y>
</position>
</task>
<task>
<taskType>
<taskTypeName>Internet Explore</taskTypeName>
</taskType>
<taskName>百度云盘</taskName>
<application>iexplore.exe</application>
<param>http://www.baiduyun.me/forum.php</param>
<position>
<x>1561</x>
<y>144</y>
</position>
</task>
</tasks>
还有一个地方想说一下,就是左侧的任务列表,本来打算用ListView实现,但是效果我不是很满意,所以就改成了现在的样子。至于标签,那只不过是自定义的控件,我对重写控件很感兴趣,本着学习和记录的目的,打算把这一块记录下来(貌似有点跑题呀~)。在撸码的时候,发现Label控件的大小不是很好控制,其实我的需求是Label既包含了AutoSize属性,还能够给checkbox留下一点空间,就是说checkbox的位置始终紧贴在Label的右内侧,文字长度改变时,整个控件长度也发生变化,但是checkbox的相对位置是不变的~~结果纠结了,哎... ...无奈只能用固定的长度了,四个汉字的长度,如果有大神知道怎么搞定这个需求,望不吝赐教~~下面贴出自定义控件代码(大神绕道...)
新建用户控件,并重写控件的OnPaint方法:
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
int x = this.Width;
int y = this.Height;
Point leftTop = new Point(, );
Point rightTop = new Point(x - , );
Point leftBottom = new Point(, y - );
Point rightBottom = new Point(x - , y - ); g.DrawLine(new Pen(Color.White), leftTop, rightTop);
g.DrawLine(new Pen(Color.White), leftBottom, rightBottom);
g.DrawLine(new Pen(Color.White), leftTop, leftBottom);
g.DrawLine(new Pen(Color.White), rightTop, rightBottom);
//画上边缘
for (int i = ; i < x - ; i += )
{
g.FillRectangle(new SolidBrush(Color.Black), new Rectangle(i, , , ));
} //画下边缘
for (int m = ; m < x - ; m += )
{
g.FillRectangle(new SolidBrush(Color.Black), new Rectangle(m, y - , , ));
} //画左边缘
for (int i = ; i < y - ; i += )
{
g.FillRectangle(new SolidBrush(Color.Black), new Rectangle(, i, , ));
} //画右边缘
for (int i = ; i < y - ; i += )
{
g.FillRectangle(new SolidBrush(Color.Black), new Rectangle(x - , i, , ));
}
base.OnPaint(e);
}
再给组合控件添加一些属性,给外部调用:
private bool labelChecked = false;
private string labelText;
public bool LabelChecked
{
get
{
return ck.Checked;
}
set
{
ck.Checked = value;
}
} public string LabelText
{
get
{
if(!String.IsNullOrEmpty(lb.Text))
return lb.Text;
return "输入标签";
}
set
{
lb.Text = value;
}
}
那么这个组合控件就完成了,生成后可以在右侧属性栏为其赋值,直接使用就可以啦~~~
结语
本来想在上一篇完成后紧接着更新这一篇,但是时间有限,事情也很多,所以就推迟到现在才完成(其实还没有完成,最上面划删除线的啷个~~)。不得不承认,在做的过程中总会遇见这样那样或多或少的问题,有些问题看起来很简单,但是做起来是有些困难的,克服了这些困难也就成功了,也就有经验来处理类似的问题了,所以别问那些大牛是怎么那么牛的~~那是码出来的。所以,骚年,敲代码吧~~让困难来得更猛烈些吧~~~~~
下一步我准备继续完善这个签到器(其实功能扩展多了,就不叫这个名字了... ...)。另外,有些园友想要源码,我会尽快整理好发布到Github上~~多谢大家的支持!!!
如果觉得好玩儿,就帮赞一个呗~\(≧▽≦)/~
补充GitHub地址:请点我
作者:悠扬的牧笛
博客地址:http://www.cnblogs.com/xhb-bky-blog/p/4116148.html
声明:本博客原创文字只代表本人工作中在某一时间内总结的观点或结论,与本人所在单位没有直接利益关系。非商业,未授权贴子请以现状保留,转载时必须保留此段声明,且在文章页面明显位置给出原文连接。
【原创】自己动手写工具----签到器[Beta 2.0]的更多相关文章
- 【原创】自己动手写工具----签到器[Beta 1.0]
一.写在前面 最近公司没有什么项目,想通过项目练练手的机会也没有,只能自己学习了,因此空下来的时间也挺多的,就打开网页看看吧,哎,一打开就让签到(像什么百度知道啊.百度云盘啊之类的),我签到的目的是获 ...
- 【原创】自己动手写工具----XSmartNote [Beta 3.0]
一.前面的话 在动笔之前,一直很纠结到底要不要继续完成这个工具,因为上次给它码代码还是一年多之前的事情,参考自己动手写工具----XSmartNote [Beta 2.0],这篇博文里,很多园友提出了 ...
- 【原创】自己动手写工具----XSmartNote [Beta 2.0]
一.前面的话 在上一篇自己动手写工具----XSmartNote中,我简单介绍了这个小玩意儿的大致界面和要实现的功能,看了一下园子里的评论,评价褒贬不一,有人说“现在那么多云笔记的工具”,“极简版ev ...
- 【原创】自己动手写工具----XSmartNote [Beta 1.0]
一.背景 有个朋友是在他们单位的市场部,手里的策划文案以及PPT,少则数百,多则上千,多年下来也是一笔不可小觑的财富,每一次新的策划都可以从以往的文案或PPT中“拿来主义”,有着很好的借鉴意义,但是这 ...
- 【原创】自己动手写控件----XSmartNote控件
一.前面的话 在上一篇博文自己动手写工具----XSmartNote [Beta 3.0]中,用到了若干个自定义控件,其中包含用于显示Note内容的简单的Label扩展控件,用于展示标签内容的labe ...
- [原创]NT系统信息察看工具 : NtInfoGuy
原文链接:[原创]NT系统信息察看工具 : NtInfoGuy 对于windows的内部,我们有太多的东西需要了解,认知.我们非凡的.从不知足的探求本性驱使我们要 拨开迷雾得见青天.太多的木马,病毒, ...
- 动手写个数字输入框1:input[type=number]的遗憾
前言 最近在用Polymer封装纯数字的输入框,开发过程中发现不少坑,也有很多值得研究的地方.本系列打算分4篇来叙述这段可歌可泣的踩坑经历: <动手写个数字输入框1:input[type=nu ...
- 自己动手写处理器之第二阶段(1)——可编程逻辑器件与PLD电路设计流程
将陆续上传本人写的新书<自己动手写处理器>(尚未出版),今天是第五篇,我尽量每周四篇 通过上一章的介绍,读者应该知道CPU内部有一些主要的电路,比方:译码电路.运算电路.控 ...
- 自己动手写处理器之第二阶段(2)——Verilog HDL简单介绍
将陆续上传本人写的新书<自己动手写处理器>(尚未出版),今天是第六篇.我尽量每周四篇 2.3 Verilog HDL简单介绍 本书实现的OpenMIPS处理器是使用Verilog HDL编 ...
随机推荐
- Android Weekly Notes Issue #221
Android Weekly Issue #221 September 4th, 2016 Android Weekly Issue #221 ARTICLES & TUTORIALS And ...
- 3D坦克大战游戏源码
3D坦克大战游戏源码,该游戏是基于xcode 4.3,ios sdk 5.1开发.在xcode4.3.3上完美无报错.兼容ios4.3-ios6.0 ,一款ios平台上难得的3D坦克大战游戏源码,有2 ...
- 关于bundle install 的一点补充
在第一次运行bundle install之后,生成了Gemfile.lock文件,里面记录gem的具体版本号,按照官方文档说明,以后运行bundle install就不会再依据Gemfile,而是根据 ...
- Freemarker 程序开发
Freemarker 程序开发 现在web开发中,多使用freemarker 来描述页面.通常会使用的macro来定义各种组件,从而达到UI组件的复用.结合使用其它的指定,可快速的描述一个html页面 ...
- css之盒模型
盒模型由内容(content).填充(padding).边框(border).边界(margin)组成,一个盒子中主要的属性就5个:width.height.padding.border.margin ...
- SQLServer中Partition By 函数的使用
今天群里看到一个问题,在这里概述下:查询出不同分类下的最新记录.一看这不是很简单的么,要分类那就用Group By;要最新记录就用Order By呗.然后在自己的表中试着做出来: 首先呢我把表中的数据 ...
- Linux shell脚本编程(二)
Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...
- iOS实现渐变色背景(两种方式实现)
之前做过类似的功能,现在记录一下,来来来... 效果图: 说明=========================== 方法1: 说明:无返回值 用法:直接调用方法.原理是在view的layer层添加. ...
- java正则表达式
java正则表达式 1.Java正则表达式的语法与示例: http://baike.xsoftlab.net/view/207.html 2.Java 正则表达式: http://www.runo ...
- 关闭selinux
1.查看SELinux状态:getenforce Enforcing(启动) disable(禁用) 1.禁用SELinux(重启后依然生效) 修改 vi /etc/sysconfig/selinux ...