最近闲的有点无聊,想开一个帖子扫盲一些脚本的原理,比如后台卡

刚刚讲到1、用robot类来模拟按键,2、按键精灵自带的按键模拟,这些模拟是软件层面的模拟。
此外,按键模拟的大概方向是有三个:
一、编译语言自带的按键模拟,这个的原理我不太清楚,上诉的robot类和按键精灵的,我都归在此类。
二、通过调用User32里面的函数,比如windowsAPI里面有两个命令,叫SendMessage以及PostMessage ,翻译过来是《发送信息》和《投递信息》,这两个函数可以实现,模拟windows系统,对焦点窗口传送信号。
三、通过调用驱动,来实现。具体实现是:三国是用directX作为游戏驱动的。可以从这个方面来实现驱动级的按键模拟。

楼主 灭绝VR死亡  发布于 2020-04-05 18:38:00 +0800 CST  
现在,我逐一来解释一下,上面三个模拟按键的优势与弊端。

楼主 灭绝VR死亡  发布于 2020-04-05 18:42:00 +0800 CST  
首先是第一点: 通过软件自带的功能,实现按键模拟。
优点:1、灵活轻巧,易于编写
缺点:1、只能前台操作,需要的人为操作比较多。2、前台操作决定了这个功能同时只能同时进行客户端的使用,比如挤线功能,只能先挤完这个号,再挤另一个号(不过我偷懒了,就是写的这个hhh)

楼主 灭绝VR死亡  发布于 2020-04-05 18:52:00 +0800 CST  
吃了个饭,突然被加精,开心,有动力一晚更完了

楼主 灭绝VR死亡  发布于 2020-04-05 20:08:00 +0800 CST  
紧接着就是第三点:通过驱动来模拟按键
这个是大型游戏最常见的写辅助的手法。因为是从驱动层面入手的,要反辅助的游戏方,耗费大量的工作,也不一定能取得较好的成效。我举一个大家非常常见的例子:通过修改宏设置,使得你的盲僧可以 瞬间摸眼w。


优点:1、几乎可以无视游戏的屏蔽
缺点:1、只能前台操作。2、无法对焦点窗口以外的窗口进行操作。3、只能前台导致它不能多开,也不能后台,也就是说这个原理不能应用在后台卡键和同步器上面

楼主 灭绝VR死亡  发布于 2020-04-05 20:16:00 +0800 CST  
今天是1.5倍,楼楼在更新帖子的时候,也不忘后台卡键,赚零花钱呢

楼主 灭绝VR死亡  发布于 2020-04-05 20:21:00 +0800 CST  
扯一下淡,为什么我会考虑用java呢,对于user32库里面,c++是最方便的,其次就是python。 然而,C++我不会多线程。python我就只会看代码而已。

楼主 灭绝VR死亡  发布于 2020-04-05 20:23:00 +0800 CST  
在进行下一步讲解之前,我们务必需要知道第二种方法。所以,接下来,我会用大量的篇幅来讲解,SendMessage以及PostMessage,这两个函数的用法。

楼主 灭绝VR死亡  发布于 2020-04-05 20:29:00 +0800 CST  
首先作为一个还没正式程序员的程序员,对于新接触的函数,我们得调查两个东西。第一个有没有官方说明文档,第二个是,有没有定义该函数的源文件。
官方的说明文档太长了,我们直接看这个API的定义



可以看到,SendMessage函数里面,有四个参数
第一个参数类型为HWND 中文叫做句柄。
第二个参数是UINT类型,unsigned int 中文叫做 无符号整型,简单来说就是自然数
第三个和第四个参数 的参数类型,我也搞不太明白,说是为了兼容32系统的历史遗留产物, 但是我们只需要知道,这两个参数的类型也是一个整形,就ok了。


可能这些对于一个萌新来说,压力巨大。可是没关系,下面说的这些,大家就能听得懂了。

楼主 灭绝VR死亡  发布于 2020-04-05 20:47:00 +0800 CST  
我们的每一个窗口,都有一个句柄,这个句柄是我们的电脑,用来唯一识别我们的应用程序的。一个三国对应一个句柄,三个三国对应三个句柄, 但是句柄之间两两不同,这才是定位成功的决定因素。


换言之,三国通过句柄使得它被计算机认识并控制,而我们要通过这个句柄,假装自己是电脑从而向三国发送指令。

楼主 灭绝VR死亡  发布于 2020-04-05 20:56:00 +0800 CST  
如果我们要跟三国说,你给我跳一下。那么我们应该这样写:
PostMessageW (hWnd, WM_KEYDOWN ,VK_SPACE,0);
PostMessageW (hWnd, WM_KEYUP ,VK_SPACE,0);


咦,听不懂。
没事还有个中文版:
投递消息( 三国的句柄, 按键按下指令, 按下的键是空格,空白参数 );
投递消息( 三国的句柄, 按键弹起指令, 按下的键是空格,空白参数 );
是不是一目了然了。


三国的按键还有一些特殊的地方,我们待会在讲同步器的时候,再深入研究三国的按键机制

楼主 灭绝VR死亡  发布于 2020-04-05 21:10:00 +0800 CST  
根据上一楼所说,我们只需要按照这种方式,照猫画虎,就可以轻易的解决卡键的问题了。


我的这个科普性质的教程,是需要一定的代码基础的。我可能只讲大概的思路。如果可能的话,我会在本贴的后面附上java写这个脚本的注意事项。


现在,当我们了解到原来投递消息,如此的简单的时候。在我们畅想着,可以通过信息的不断嵌套使用,让脚本越来越方便自己的时候,突然意识到,我们不知道怎么获得三国的句柄,那咋办嘛。

楼主 灭绝VR死亡  发布于 2020-04-05 21:23:00 +0800 CST  
这里我提供两种方法:
第一种,记录鼠标所在地方的句柄
GetCursorPos(&pNow); //将鼠标当前位置,返回到pNow结构体里面,其中pNow是一个属性只有x坐标,y坐标的结构体
hwndPointNow = WindowFromPoint(pNow); //将鼠标当前位置的句柄读取出来,并且存到hwndPointNow里面。


第二种,记录当前所选中窗口的句柄
hwnd = GetForegroundWindow();


按键精灵有个很方便的抓取句柄的插件,但是java没有,于是我个人采取的是第二种方式获取句柄,延迟三秒后,选中要卡键的窗口,然后会自动返回句柄,完美解决问题。


至于第一种方法和第二种方法哪个更好? 各有千秋,不过我用java试了一个晚上,都找不出来第一种方法的错误在哪里(已经用C++实践过此方法是可以的),然后改成第二种方式了。

楼主 灭绝VR死亡  发布于 2020-04-05 21:38:00 +0800 CST  
原理到这儿,差不多就讲完了,主要科普PostMessage和SendMessage两个的用法。细心的你可能留意到,PostMessage和SendMessage,我只讲了其中之一呀,另外一个呢?


对于三国的脚本书写,两者其实差不多是一样的。不同点在于,SendMessage需要三国给你返回一个值才会进行下一步操作,不然就会把消息一直堵在那儿。 PostMessage就是给三国发送一个信号,但是不管三国收到后什么反应,他都会直接的进行下一步操作。


三国过于厉害,他的sendmessage会瞬间返回一个0还是1,以至于,两者的使用是没什么区别的。

楼主 灭绝VR死亡  发布于 2020-04-05 21:51:00 +0800 CST  
然后下一个阶段,逐一剖析,每个脚本的原理和所涉及的知识点。

楼主 灭绝VR死亡  发布于 2020-04-05 22:06:00 +0800 CST  
首先的最先提到的挤线:
这个是我最先开始研究,并且,写的极其轻量的脚本。 所使用的方法就是Robot类,用来模拟人在键盘上面的操作。
需要代码的同学,我截个图。(语言JAVA,这是在线程里面的一段代码)


楼主 灭绝VR死亡  发布于 2020-04-05 22:14:00 +0800 CST  


然后第二个功能是,我命名的半自动抢点器啦。目前正在玩新区,或者说以前曾经来玩过新区的同学,肯定经历过,莫名其妙一瞬间,点券全部被扫清的情况吧。


我就被这种莫名其妙的炒点行为,深深的恶心到了,嘤嘤嘤。身上就这点钱,还随着时间不断地贬值贬值贬值。抢点还抢不过别人。


于是我就一气之下,写了这个功能。主要是模拟我们的双手抢点的过程,关键点在于把鼠标移动的过程给省略了,所以抢点的成功率,显著提高。 但是由于是半自动的(没有识别功能),所以经常一时眼花的把50点当作200点抢了(哭晕)。

楼主 灭绝VR死亡  发布于 2020-04-05 22:25:00 +0800 CST  


补一张图

楼主 灭绝VR死亡  发布于 2020-04-05 22:48:00 +0800 CST  
然后到了跨时代意义的第三个功能:后台卡键了。


这个功能对我来说其实是没什么太大用途的,主要是因为我的结拜他和我提到过这个东东。然后因为他生日嘛,疫情期间也不能出门什么的,就勉为其难的送他一个后台卡键叭


然后就是一通碎碎念了,这玩意儿,折腾了我两三天,每天睡了起,起了就研究,然后写代码,然后倒头就睡的那种,那几天,我活跃三包都没心情去拿。

楼主 灭绝VR死亡  发布于 2020-04-05 23:22:00 +0800 CST  
我顶不顺了=-=,明天再更。

楼主 灭绝VR死亡  发布于 2020-04-05 23:27:00 +0800 CST  

楼主:灭绝VR死亡

字数:8042

发表时间:2020-04-05 17:24:00 +0800 CST

更新时间:2021-01-08 05:23:55 +0800 CST

评论数:437条评论

帖子来源:百度贴吧  访问原帖

 

热门帖子

随机列表

大家在看