【原创】自己动手写工具----签到器(升级版)

一、前面的话

上一篇中基本实现了简单的签到任务,但是不够灵活。在上一篇自己动手写工具----签到器的结尾中,我设想了几个新增功能来提高工具的灵活程度,下面把新增功能点列出来看看:

(1)新增其他的进程任务;

(2)任务按照进程进行分类:用IE就是执行IE的任务,与其他(如资源管理器等)无关;

(3)每执行完一个任务关闭任务窗口;

(4)对签到性质的任务进行”已签到“过滤;

(5)实现执行的任务列表自定义;

(6)另外实现任务的可视化;

还是先来看看效果图:

二、签到器的改进

在上一个版本中,(自己动手写工具----签到器),我们可以自己来添加任务,但是有个最重要的问题,那就是任务列表的可视化。上一版本中,只是针对简单的几个IE任务,所以比较简单,但是随着任务越来越多,有的时候只想执行其中的一些任务而不是所有,这就不可避免地要对任务进行分类处理,这样就可以针对自己选择的任务进行批量执行。就是上面图中左侧的部分啦~~通过勾选需要执行的任务,点击“确定”按钮,你就可以看着任务被一个一个地执行啦~\(≧▽≦)/~

在执行的过程中,如果任务过多就会占用过多的资源(如开启多个IE浏览器进程,上一个版本就是酱紫的... ...),为了解决这个问题,对代码进行小小的优化,每次执行完成一个任务,就会关闭该进程,但是这里有个疑问,希望大神帮忙支支招儿,感激不尽啊~~~~
什么问题呢?就是如果执行任务之前,你已经打开了一个IE进程,那么在启动执行任务后,随着该任务进程的关闭会连同之前的IE进程Kill掉,所以这是个BUG,查了一下资料,大概的意思是获取进程的某个句柄后关闭即可,本人还没有测试,希望大神给指个明路~~

下面是为了避免占用过多的系统资源,而进行改进后的执行代码:

 1        //关闭进程
 2         private void KillProcess(string processName)
 3         {
 4             Process proc = new Process();
 5             foreach (Process item in Process.GetProcessesByName(processName))
 6             {
 7                 if (!item.CloseMainWindow())
 8                 {
 9                     item.Kill();
10                 }
11             }
12         }
 1         //执行任务
 2         public void ExcuteTask(TaskModel task)
 3         {
 4             int processID;
 5             ProcessStartInfo ps = new ProcessStartInfo(task.Application, task.Url);
 6             ps.WindowStyle = ProcessWindowStyle.Maximized;
 7             Process myProc =Process.Start(ps);
 8             processID = myProc.Id;
 9             Thread.Sleep((int)numericUpDown2.Value * BASENUM);
10             //设置鼠标位置
11             MouseEvents.SetCursorPosition(task.PositionX, task.PositionY);
12             //模拟鼠标双击
13             MouseEvents.MouseDbClick();
14             Thread.Sleep(1000);
15             KillProcess(task.Application);
16         }

既然添加了任务分类信息,那么数据的结构就要发生变化了,每个任务多了一个属性,就是所属分类:

 1         private string typeName;
 2         private int typeID;
 3         //任务分类名称
 4         public string TypeName
 5         {
 6             get { return typeName; }
 7             set { typeName = value; }
 8         }
 9
10         //任务ID
11         public int TypeID
12         {
13             get { return typeID; }
14             set { typeID = value; }
15         }

数据结构:

<?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方法:

 1         protected override void OnPaint(PaintEventArgs e)
 2         {
 3             Graphics g = e.Graphics;
 4             int x = this.Width;
 5             int y = this.Height;
 6             Point leftTop = new Point(0, 0);
 7             Point rightTop = new Point(x - 1, 0);
 8             Point leftBottom = new Point(0, y - 1);
 9             Point rightBottom = new Point(x - 1, y - 1);
10
11             g.DrawLine(new Pen(Color.White), leftTop, rightTop);
12             g.DrawLine(new Pen(Color.White), leftBottom, rightBottom);
13             g.DrawLine(new Pen(Color.White), leftTop, leftBottom);
14             g.DrawLine(new Pen(Color.White), rightTop, rightBottom);
15             //画上边缘
16             for (int i = 0; i < x - 1; i += 3)
17             {
18                 g.FillRectangle(new SolidBrush(Color.Black), new Rectangle(i, 0, 2, 1));
19             }
20
21             //画下边缘
22             for (int m = 0; m < x - 1; m += 3)
23             {
24                 g.FillRectangle(new SolidBrush(Color.Black), new Rectangle(m, y - 1, 2, 1));
25             }
26
27             //画左边缘
28             for (int i = 0; i < y - 1; i += 3)
29             {
30                 g.FillRectangle(new SolidBrush(Color.Black), new Rectangle(0, i, 1, 2));
31             }
32
33             //画右边缘
34             for (int i = 0; i < y - 1; i += 3)
35             {
36                 g.FillRectangle(new SolidBrush(Color.Black), new Rectangle(x - 1, i, 1, 2));
37             }
38             base.OnPaint(e);
39         }

再给组合控件添加一些属性,给外部调用:

        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上~~多谢大家的支持!!!

如果觉得好玩儿,就帮赞一个呗~\(≧▽≦)/~

作者:湫楓 謃箜

博客地址:http://www.cnblogs.com/xhb-bky-blog/p/4116148.html

声明:本博客原创文字只代表本人工作中在某一时间内总结的观点或结论,与本人所在单位没有直接利益关系。非商业,未授权贴子请以现状保留,转载时必须保留此段声明,且在文章页面明显位置给出原文连接。

时间: 2024-10-08 11:50:26

【原创】自己动手写工具----签到器(升级版)的相关文章

【原创】自己动手写工具----XSmartNote [Beta 3.0]

一.前面的话 在动笔之前,一直很纠结到底要不要继续完成这个工具,因为上次给它码代码还是一年多之前的事情,参考自己动手写工具----XSmartNote [Beta 2.0],这篇博文里,很多园友提出了宝贵的意见.最后决定吸收园友的建议把这个工具重构一下.首先给它换了个名 称,XSmartNote.因为各种自身的原因,并没有完成这个工具的基本功能,只是实现了基本的框架.最近有点时间就搞了一下,权当做打下基础.本来想用B/S结构来重新搞一下,毕竟园子里有很多大牛都是专注于ASP.NET MVC,但仔

【原创】自己动手写工具----随手记(最终版)

一.前面的话 在上一篇自己动手写工具----随手记中,我简单介绍了这个小玩意儿的大致界面和要实现的功能,看了一下园子里的评论,评价褒贬不一,有人说“现在那么多云笔记的工具”,“极简版evernote”,我想说的是,别人的工具再好用,终究不是自己写的,其实写这个的目的,一方面是锻炼自己的技术能力,在coding的时候,或多或少会遇到一些问题,在解决这些问题的过程中,技术能力就会有所提升:另一方面,写这个东西还有自己个人原因,可以随时记录一些繁杂的知识点,通过给这些知识点打上标签,可以实现归类,那有

自己动手写工具:百度图片批量下载器

开篇:在某些场景下,我们想要对百度图片搜出来的东东进行保存,但是一个一个得下载保存不仅耗时而且费劲,有木有一种方法能够简化我们的工作量呢,让我们在离线模式下也能爽爽地浏览大量的美图呢?于是,我们想到了使用网络抓取去帮我们去下载图片,并且保存到我们设定的文件夹中,现在我们就来看看如何来设计开发一个这样的图片批量下载器. 一.关于网络抓取与爬虫 网络蜘蛛的主要作用是从Internet上不停地下载网络资源.它的基本实现思想就是通过一个或多个入口网址来获取更多的URL,然后通过对这些URL所指向的网络资

【原创】自己动手写工具----随手记

一.背景 有个朋友是在他们单位的市场部,手里的策划文案以及PPT,少则数百,多则上千,多年下来也是一笔不可小觑的财富,每一次新的策划都可以从以往的文案或PPT中“拿来主义”,有着很好的借鉴意义,但是这么多的材料,如果挨个翻看还不得累死.我们知道每个Word或者PPT打开至少要4秒钟(我的电脑是这样,配置不赖),那几百个下来什么也不用做了,时间都在打开这些材料中度过了.而记录这些东西,又不需要花费专门的精力,只要想记下来,copy,paste,加上标签便于检索就OK啦~于是这个小玩意儿就产生啦~\

自己动手写工具:自动点击小插件

一. 模拟点击操作应用场景 当我们需要对一个网页上的某个按钮进行多次点击以求得某种“好处”的时候,例如天猫的抢红包活动,我们可能需要点击N次之后才有可能获得一个红包,但是这个N是一个未知数,有可能我们要不停地点击半个小时甚至一个小时都还无法获得,自己估计也会点鼠标点得醉了.因此,针对这种情况,我们希望自己写一个小工具来让计算机帮我们做这件事. 既然是让计算机模拟我们的点击操作,其思路自然是找到指定的按钮或图片,循环对其执行click事件.于是,我们开始对其做一个最简单的实现来看看其基本思路.首先

【原创】自己动手写控件----XSmartNote控件

一.前面的话 在上一篇博文自己动手写工具----XSmartNote [Beta 3.0]中,用到了若干个自定义控件,其中包含用于显示Note内容的简单的Label扩展控件,用于展示标签内容的label扩展控件,还有包含自定义事件的含checkbox的控件.自定义控件的好处就是其灵活程度很高,不但可以扩展控件的外观,还可以扩展控件的事件,甚至从底层拦截Windows消息进行处理,这也是我喜欢自己写控件的原因.至于自定义控件的几种形式在这里就不说了,有兴趣的小伙伴可以百度一下,下面来看看这些控件的

自己动手写编译器、链接器内容简介

<自己动手写编译器.链接器> 本书讲述了一个真实编译器的开发过程,源语言是以C语言为蓝本,进行适当简化定义的一门新语言,称之为SC语言(简化的C语言),目标语言是大家熟悉的Intel x86机器语言.在本书中,读者将看到从SC语言定义,到SCC编译器开发的完整过程.本书介绍的SCC编译器,没有借助Lex与Yacc这些编译器自动生成工具,纯手工编写而成,更便于学习和理解.为了生成可以直接运行EXE文件,本书还实现了一个链接器.读完本书读者将知道一门全新的语言如何定义,一个真实的编译器.链接器如何

【原创】连“霍金”都想学习的“人工智能”---【自己动手写神经网络】小白入门连载开始了(1)

欢迎关注[自己动手写神经网络]的博客连载!!! 第1章 神经网络简介 神经网络这个词,相信大家都不陌生.就在你打开本书,并试图了解神经网络时,你已经在使用一个世界上最复杂的神经网络——你的大脑,一个由大约1000亿个神经元(每个单元拥有约1万个连接)构成的复杂系统.但人的大脑太过复杂,以至于科学家们到目前为止仍然无法准确解释大脑的工作原理和方式.但有幸的是,生物神经网络的最最基本的元素已经能够被识别,而这就构成了本书想为你介绍的人工神经网络(Artificial Neural Network).

动手写一个Remoting测试工具

基于.NET开发分布式系统,经常用到Remoting技术.在测试驱动开发流行的今天,如果针对分布式系统中的每个Remoting接口的每个方法都要写详细的测试脚本,无疑非常浪费时间.所以,我想写一个能自动测试remoting接口的小工具InterfaceTester.而且,当分布式系统中的某个remoting接口出现bug时,该小工具可以提交需要模拟的数据,以便在调试remoting服务的环境中,快速定位和解决bug. InterfaceTester运行起来后的效果如下图: 1.如何使用 (1)首