【原创】自己动手写工具----签到器[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编 ...
随机推荐
- Mockjs,模拟数据生成器
(推荐使用)Mock.js是一款模拟数据生成器,旨在帮助前端攻城师独立于后端进行开发,帮助编写单元测试. 提供了以下模拟功能: 1. 根据数据模板生成模拟数据. 2. 模拟Ajax请求,生成并返回模拟 ...
- android 帧动画
首先在res/drawable/name1.xml/定义一组图片集合: <?xml version="1.0" encoding="utf-8"?> ...
- 几款Git GUI客户端工具
工欲善其事,必先利其器. 作为一名开发人员,你不可能不知道git,无论你是开发自己的开源项目还是和团队一起进行大规模产品的开发,git都已经是源代码管理工具的首选.当然,那些hardcore deve ...
- Junit单元测试
写一个被测试的类 这是类中的一些方法,将一个16进制转化为10进制 reckon()为转化的主要方法,返回结果为10进制数 judge()判断字符是否在0-9,A-F之间,并将字符转化为0-15之中的 ...
- Git本地服务器搭建及使用详解
Git本地服务器搭建及使用 Git是一款免费.开源的分布式版本控制系统.众所周知的Github便是基于Git的开源代码库以及版本控制系统,由于其远程托管服务仅对开源免费,所以搭建本地Git服务器也是个 ...
- ios10.2真机调试包,ios升级10.2后需要添加
下载地址: http://download.csdn.net/detail/koktear/9710820 添加地址: finder-应用程序-找到Xcode-右击显示包内容-Contents-Dev ...
- 利用线上数据验证系统 Gor
Web 应用性能和压力测试工具 Gor - 运维生存时间 http://hao.jobbole.com/gorhttp/ 要使用线上引流到测试环境的作用,需要做到以下几点: 1.新搭建一套测试环境,连 ...
- 关于类protected、private、public的方法
今天在写代码的时候发现了一种情况,(TP框架)有一个model类 AdminModel.class.php class AdminModel extends Model{ protected $_ ...
- LAMP环境配置 linux+apache+mysql+php
虚拟机安装Linux系统: 新建虚拟机过程中选择Linux,下面选择centos或者是Ubuntu Linux切换图像命令:注意只有装了图像界面才可以切换 查看安装环境的版本: rpm -qa 查看安 ...
- C# 带签名dll破解
首先申明,本文只是从技术的角度来分析下怎样破解带签名的C#写的dll文件.大家如有遇到收费的软件或类库还是应该去购买正版,程序员何苦为难程序员呢. 不带签名的破解 不带签名的dll文件的破解很简单,通 ...