记二次【模拟点击】,WinForm小软件开采进度

前言

     
 年终7月的时候,有心上人找到本身,说想付出2个模拟点击的软件。最终软件做完后,发掘意义不美貌。唯一开拓的作者是感觉最棒是抛弃了,做运行的他,持之以恒说那一个没难点,说是改动合营情势。最终也是无休止了之了。

       
不过,在那中间经历了二次重写,二回中心措施的变动,无多次的查资料,找消除办法至凌晨。中间穿插了广大次的斟酌修改,修改研究。尽管效果很简短,然则也耗费了6个月的血汗。心想,仍旧想好好总括一下。最终的软件分界面如下:

图片 1图片 2图片 3

 

兑现思路&使用控件

     
 首先,在停放浏览器里面张开网页,通过Javascript
获取须要的点击的坐标地方;总计网页中的坐标,在屏幕中的坐标地点;通过模拟鼠标的操作(滚动滑轮,移动,点击);以及轻便的2遍点击。最终再清除缓存,改变IP,改换分辨率,以及User-Agent。来实现诈欺网址,以为是分化的人来点击的目标。

       使用的具体方法,如下:

  1. 嵌入浏览器,CefSharp
    4玖.0 为了包容.NET 四.0,大多数Win七足以直接选拔;
  2. 鼠标,键盘模拟输入,InputSimulator ,
    最早在此以前是向来调用Windows API的,未有那几个好用;
  3. 切换IP,二种ADSL切换 和
    IPSmart软件(ADSL 这么些近来平素不选择的,DotRas.dll);
  4. 切换分辨率,是间接拿Github下面代码直接用。ScreenResolutionChanger;
  5. License
    使用 EasyLicense;
  6. 地面数据库SQLite;
  7. 代码混淆 .NET Reactor;

作为前端的浏览器可以搜集到的数量有那一个:网址总括中的数据搜罗原理及达成

图片 4

细微的记录

       杀毒软件的坑:使用模拟输入的时候,一贯提醒 User Interface
Privilege Isolation(用户分界面特权隔开分离)
的题目,权限不够。试了关门Windows的UAC,用超级管理员运转,给软件加数字证书,放到C盘系统目录等等。各样法子都试了就是无法模拟操作。实在无法了,然后在猪8戒下面发表职分,放上德姆o。万万没悟出,二个硕士给本人化解了,是因为360等杀毒软件导致的。。。。

     
 IPSmartDLL版本的坑:最初叶用的他们官方网站提供的dll,发掘她们格外dll基本用不起来,好像是许久不更新了。别的,状态编码也会随随意便退换,也不发立异布告。产生也结果正是,明明从前美好的,怎么前天就爆冷门用不起来了。

   
  ADSL测试的坑:代码写好后不能测试,也许测试起来很麻烦。今后那时期用ADSL拨号上网的越来越少了,一样想测试也麻烦。好不轻易找了个长途的ADSL主机,结果壹测试就断网,狼狈。。。

     
收获互连网时间:为了幸免用户直接修改系统时间,来达成突破License
。获取到 大门户网站 http header 中的 date
来检查本地时间是还是不是正确。在那中间,作者开采大6封闭扼杀了繁多的流年同步的网址,唯有一两个能用,又最为不安静,并且中国科高校的又用不起。坑货!!

     
SQLite小巧玲珑:在此之前率先个本子用
纯文本来存放配置文件,记录日志消息。十分不便利,轻易并发数组越界这样的bug。后来选择sqlite后,才发现了付出的光明。sqlite具备完全的sql那一套东西,并且体量又小,不用安装,格外适合做本地少许音讯的仓库储存。

     
 显示器分辨率:最起首是手动达成windows
api
来获取列表,改动分辨率的,bug又多又不健全。某天灵光壹闪,在github下面找了瞬间真还有这些代码,省了数不清业务。其余,小编还开采wiki上边写的,显示分辨率列表
总共唯有那么几拾一个,可知分辨率的轻重缓急,不是轻便写的。不过透过windows api
获取到的列表
就一大堆有几百个。作者分析,是因为分辨率,色深,赫兹。那多个参数排列组合导致的。

       
Cefsharp文书档案的重中之重:清除缓存,清除cookie,Storage。设置弹出方法,重写http
header,实行javascript等等。壹多种的嵌入浏览器的操作,都以看github上面包车型地铁wiki,以及google看英文文书档案(baidu正是坑爹货,同样的小说,转来转去;一般第2页十分八广告,前三页都以一律的剧情,剩下的风马牛不相干)。未有人家救助,只有硬着头皮翻译一点看一些,然后写代码试。假使找不到落到实处方式,也要去看看为何不能够完成。记录一些,小编感到相比首要的地方:

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

  • IRequestHandler
    调整Cefsharp发送请求的风浪,太多了不11列举。

  • Cef.Initialize
    只好起首化三回,要是想彻底清除缓存,必须关闭宿主程序。
    假如在主程序内,调用Cef.Shutdown
    后再行开端化会报错的。4九.0版本有那些难点,后续的本子修复了那一个主题材料。
  • 施行js 的时候,要专注锁的标题,使用 Monitor
    更精致的支配。
  • 双重翻译了github上有的Cefsharp文书档案。

     
 WinForm开发:第一回写winform程序,以为是小程序,各样粗制滥造。尤其是到末代,主窗体代码达到壹贰仟行,逻辑调用混乱,真心看不下去了,修改起来的很费劲。干脆重新写吧。重新设计文档目录,窗体拆分,代码分类,左搞右搞,总算勉强能看,但是今日又把代码翻出来看了看,总感觉什么地方不对,又说不出是哪儿不对。。。

  • 线程的要害,写惯了web,极少情形思索线程的题目。可是在桌面程序里面,线程是异常首要的难题,尤其是非主线程操作UI界面包车型大巴时候。
  • 事件的行使,同样,在桌面程序里面,事件接纳起来十分爽快。此前对代理,事件也仅仅掌握概念。实施之后,才驾驭那几个是何等美好的安排性。
  • VS 所见即所得的窗体设计分界面,由于
    Cefsharp
    运转时加载控件的,也正是支付时设计分界面打不开。这也算一点小麻烦。
  • 透过句柄的操作。
    重要获得主界面句柄,获取开关句柄,然后SendMessage,来触发开关事件。还有就是,win7在此之前和之后的SendMessage 大有两样,要小心。

       援助进度运营:由于Cef必须完全关闭宿主进度,才能够通透到底清除缓存。所以,当时就选择了,扶助进度来重启主进度。那么些比较轻巧,涉及到Process的1对操作,为了有利于易用,同时还设计了热键功效。

       License
注册
:这些相比较轻巧,参照demo。作者赢得的是本机的CPU体系号,主板系列号,硬盘的ID(为何不是连串号,因为硬盘商店长短不一,还有的厂商不设有系列号)。为了防卫被猜到,小编任由加了点料(当时的实际感受)。最终MD5加密,提取哈希值。如下图:

图片 5

 

github源码地址

总结

  1. 因而那样一折腾,深深得感到到,程序猿首要职能是在组建代码的:把不相干的代码有机的拼装在共同,组成多个足以利用的软件。
  2. 善于运用google,github,stack overflow,基本能解决99%的工夫难题。
  3. 希腊语不行卓殊首要,百度卓殊尤其坑。
  4. 实际感冒脑热的时候,不痛快的时候,不比去苏息。
  5. 供给的承认,那是十三分关键的事情。
网站地图xml地图