记一回【模拟点击】,WinForm小软件开发进度

前言

     
 年终17月的时候,有情侣找到自己,说想付出一个仿照点击的软件。最终软件做完后,发现意义不雅观。唯一开发的自家是觉得最好是甩掉了,做运营的她,坚定不移说这些没难题,说是改变合作形式。最后也是无休止了之了。

       
不过,在那中档经历了四次重写,一回基本措施的更改,无数次的查资料,找消除办法至凌晨。中间穿插了累累次的议论修改,修改研讨。固然功能很简短,不过也开销了5个月的脑力。心想,仍旧想好好总括一下。最终的软件界面如下:

图片 1图片 2图片 3

 

兑现思路&使用控件

     
 首先,在停放浏览器里面打开网页,通过Javascript
获取需求的点击的坐标地点;总结网页中的坐标,在显示器中的坐标地方;通过模拟鼠标的操作(滚动滑轮,移动,点击);以及轻易的二次点击。最终再清除缓存,更换IP,更换分辨率,以及User-Agent。来达到诈骗网站,认为是区其余人来点击的目的。

       使用的具体方法,如下:

  1. 置于浏览器,CefSharp
    49.0 为了包容.NET 4.0,半数以上Win7可以间接使用;
  2. 鼠标,键盘模拟输入,InputSimulator ,
    最早此前是一贯调用Windows API的,没有那些好用;
  3. 切换IP,二种ADSL切换 和
    IP精灵软件(ADSL 这些方今未曾行使的,DotRas.dll);
  4. 切换分辨率,是直接拿Github下边代码直接用。ScreenResolutionChanger;
  5. License
    使用 EasyLicense;
  6. 本土数据库SQLite;
  7. 代码混淆 .NET Reactor;

用作前端的浏览器可以收集到的数码有那一个:网站统计中的数据收集原理及落成

图片 4

小小的记录

       杀毒软件的坑:使用模拟输入的时候,平素提醒 User Interface
Privilege Isolation(用户界面特权隔离)
的标题,权限不够。试了关门Windows的UAC,用一级管理员启动,给软件加数字证书,放到C盘系统目录等等。种种措施都试了就是力不从心模拟操作。实在无法了,然后在猪刚鬣上边公布任务,放上Demo。万万没悟出,一个博士给我化解了,是因为360等杀毒软件导致的。。。。

     
 IP天使DLL版本的坑:最初步用的她们官网提供的dll,发现她们格外dll基本用不起来,好像是许久不更新了。此外,状态编码也会随便变更,也不发立异告示。造成也结果就是,明明在此之前可以的,怎么先天就突然用不起来了。

   
  ADSL测试的坑:代码写好后不或许测试,或者测试起来很辛勤。今后那时代用ADSL拨号上网的越来越少了,同样想测试也麻烦。好不不难找了个长途的ADSL主机,结果一测试就断网,窘迫。。。

     
获取互联网时间:为了防止用户平昔改动系统时间,来已毕突破License
。获取到 大门户网站 http header 中的 date
来检验本地时间是还是不是可靠。在那当中,小编发觉大陆封杀了许多的年华一起的网站,唯有一几个能用,又最为不平静,并且中科院的又用不起。坑货!!

     
SQLite小巧玲珑:在此之前率先个版本用
纯文本来存放配置文件,记录日志音讯。万分不便于,不难出现数组越界那样的bug。后来应用sqlite后,才发觉了支出的美好。sqlite拥有完整的sql那一套东西,并且体量又小,不用安装,相当适合做地方少量新闻的积存。

     
 屏幕分辨率:最起首是手动落成windows
api
来拿到列表,改变分辨率的,bug又多又不健全。某天灵光一闪,在github上边找了刹那间真还有这些代码,省了许多业务。其它,小编还发现wiki上面写的,显示分辨率列表
总共只有那么几十个,可知分辨率的轻重缓急,不是轻易写的。不过透过windows api
获取到的列表
就一大堆有几百个。我分析,是因为分辨率,色深,赫兹。那个参数排列组合导致的。

       
Cefsharp文档的重中之重:清除缓存,清除cookie,Storage。设置弹出方法,重写http
header,执行javascript等等。一多元的松开浏览器的操作,都以看github上边的wiki,以及google看英文文档(baidu就是坑爹货,同样的文章,转来转去;一般第一页80%广告,前三页都是一律的情节,剩下的风马牛不相干)。没有人家援救,唯有硬着头皮翻译一点看一些,然后写代码试。如果找不到落到实处形式,也要去探访为啥不可以已毕。记录一些,笔者以为相比较紧要的位置:

  • ILifeSpanHandler  控制Cefsharp弹出的窗口
    事件。(DoClose,OnAfterCreated,OnBeforeClose,OnBeforePopup)

  • IRequestHandler
    控制Cefsharp发送请求的事件,太多了不一一列举。

  • Cef.Initialize
    只好开端化五次,尽管想彻底清除缓存,必须关闭宿主程序。
    即便在主程序内,调用Cef.Shutdown
    后再也开头化会报错的。49.0本子有这一个标题,后续的版本修复了这几个难点。
  • 执行
    js 的时候,要专注锁的题材,使用 Monitor
    更加小巧的支配。
  • 再也翻译了github上部分Cefsharp文档。

     
 WinForm开发:第一遍写winform程序,认为是小程序,种种粗制滥造。尤其是到末代,主窗体代码到达一两千行,逻辑调用混乱,真心看不下去了,修改起来的很困难。干脆重新写吧。重新规划文档目录,窗体拆分,代码分类,左搞右搞,总算勉强能看,然则后天又把代码翻出来看了看,总感到哪个地方不对,又说不出是何地不对。。。

  • 线程的重点,写惯了web,极少意况考虑线程的标题。可是在桌面程序里面,线程是不行紧要的题材,特别是非主线程操作UI界面的时候。
  • 事件的应用,同样,在桌面程序里面,事件选拔起来非常舒适。以前对代理,事件也惟有知道概念。实践之后,才晓得这一个是何等美好的筹划。
  • VS 所见即所得的窗体设计界面,由于
    Cefsharp
    运行时加载控件的,相当于支付时设计界面打不开。那也算一点小麻烦。
  • 透过句柄的操作。
    首要取得主界面句柄,获取按钮句柄,然后SendMessage,来触发按钮事件。还有就是,win7
    从前和后来的SendMessage 大有例外,要专注。

       帮衬进度启动:由于Cef必须完全关闭宿主进度,才得以彻底清除缓存。所以,当时就应用了,辅助进度来重启主进度。那些比较简单,涉及到Process的局地操作,为了有利于易用,同时还规划了热键效率。

       License
注册
:那几个相比较简单,参照demo。作者得到的是本机的CPU系列号,主板体系号,硬盘的ID(为啥不是连串号,因为硬盘市场叶影参差,还有的厂家不设有连串号)。为了防范被猜到,作者任由加了点料(当时的真实感受)。最终MD5加密,提取哈希值。如下图:

图片 5

 

github源码地址

总结

  1. 透过这么一折腾,深深得感觉到,程序员首要效率是在组装代码的:把不相干的代码有机的拼装在协同,组成一个得以应用的软件。
  2. 擅长利用google,github,stack overflow,基本能一蹴即至99%的技巧难点。
  3. 罗马尼亚语不行万分主要,百度丰裕特别坑。
  4. 实际上头疼脑热的时候,不好受的时候,不如去休息。
  5. 急需的认可,这是充裕紧要的事情。
网站地图xml地图