sqlite记一不成【模拟点击】,WinForm小软件开发过程

前言

     
 年底三月之时段,有情侣找到自己,说眷恋付出一个效仿点击的软件。最后软件做了后,发现效果不完美。唯一开发之自是当最是遗弃了,做运营的他,坚定不移说此从未问题,说是改变合作格局。最终也是不了了之了。

       
不过,在这中间经历了扳平赖重写,三赖中央措施的变动,无数潮的查看资料,找解决办法至凌晨。中间穿插了成百上千不行的议论修改,修改钻探。尽管效率卓殊简短,不过也花了六只月之脑力。心想,依然怀恋好好总括一下。最终之软件界面如下:

sqlite 1sqlite 2sqlite 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;

用作前端的浏览器会收集到的数额暴发那多少个:网站统计中之数据搜集原理及实现

sqlite 4

小小的笔录

       杀毒软件的坑:使用模拟输入的时,一向指示 User Interface
Privilege Isolation(用户界面特权隔离)
的题目,权限不够。试了关门Windows的UAC,用一流管理员启动,给软件加以数字证书,放到C盘系统目录等等。各个艺术还试了不畏是力不从心模拟操作。实在没办法了,然后在猪八戒下面发表任务,放上Demo。万万从未悟出,一个研究生受自己解决了,是因360对等杀毒软件导致的。。。。

     
 IP精灵DLL版本的坑:最起始用之他俩官网提供的dll,发现他们充分dll基本用不起,好像是许久不更新了。此外,状态编码为相会随便变更,也不发立异通告。造成也结果就是是,明明往日美好的,怎么前日即爆冷用无起来了。

   
  sqlite,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加密,提取哈希值。如下图:

sqlite 5

 

github源码地址

总结

  1. 透过这么一折腾,深深得发到,程序员重要意图是在组建代码的:把非系的代码有机的拼装在一道,组成一个足采纳的软件。
  2. 工利用google,github,stack overflow,基本可以化解99%的技能问题。
  3. 乌克兰语不行酷重要,百度相当坏坑。
  4. 骨子里胸口痛脑热的时节,不爽快的时刻,不若去休息。
  5. 要求的认可,这是甚关键之作业。
网站地图xml地图