万王之王 KOK King of Kings

 找回密码
 加入我们
查看: 1057|回复: 1

【按键精灵】断线重连代码,适合嵌入你目前使用的代码中

[复制链接]
发表于 2017-11-25 12:07 | 显示全部楼层 |阅读模式
  1. Hwnd = Plugin.Window.MousePoint()
  2. Delay 1000
  3. Call Plugin.Window.SetText(Hwnd,"这里输入你需要的窗口名称")
  4. Delay 1000

  5. Rem begin
  6. Delay 2000
  7. a = HOUR(now)
  8. b = minute(now)
  9. If a=07 and b>=05 and b<=09
  10. //你需要重连的小时数,24小时制,格式HH,如上例07
  11. //你需要重连的最早分钟数,格式MM,如上例05
  12. //你需要重连的最晚分钟数,格式MM,如上例09
  13.         Goto reconect
  14.         Else
  15. End If


  16. //这中间可以加入你的主要代码段




  17. Rem reconect
  18. Call Plugin.Window.Active(Hwnd)
  19. Delay 5000
  20. Call Plugin.Window.Restore(Hwnd)
  21. Delay 8000
  22. MoveTo 1091, 701
  23. //在1920*1080分辨率下,如果你的游戏界面是以默认位置打开,这里就是游戏前台时候出现“你断线了,是否重连的【是】的位置,如果分辨率不同或者你的窗口位置移动了,你需要使用按键精灵的【抓抓】功能找到这个点的具体位置”
  24. Delay 3000
  25. LeftClick 1
  26. Delay 5000
  27. MoveTo 1173, 724
  28. //同上,这个是每次游戏登录时候那个烦人的公告的【取消】的位置
  29. Delay 3000
  30. LeftClick 1
  31. Delay 5000
  32. Call Plugin.Bkgnd.SendString(Hwnd, "ABCDEFG")
  33. //ABDCDFG这里输入你的游戏账号
  34. Delay 3000
  35. Call Plugin.Bkgnd.KeyPress(Hwnd, 9)
  36. Delay 3000
  37. Call Plugin.Bkgnd.SendString(Hwnd, "GFEDCBA")
  38. //GFEDCBA位置改为你的密码
  39. Delay 3000
  40. Call Plugin.Bkgnd.KeyPress(Hwnd, 13)
  41. Delay 3000
  42. MoveTo 1151, 774
  43. Delay 3000
  44. LeftClick 1
  45. Delay 3000
  46. MoveTo 1158, 782
  47. Delay 3000
  48. LeftClick 1
  49. Delay 3000
  50. Call Plugin.Window.Min(Hwnd)
  51. Delay 520000
  52. Goto begin
复制代码



大致阐述一下我的思路,介绍一下这段代码。

由于按键精灵很难通过后台方式找色、找图、判断文字,所以目前要做到断线重连功能只能将该IKING程序前台。但如果你需要挂很多号,那么大家都前台就会造成过度挤占系统资源的情况。

于是我换了一种思路——既然每天早上7:00服务器会重启(这个时间你注定会掉线),那么何不直接写一个类似“7点执行一次重新登录游戏账号的操作”这样的代码呢?

于是本代码段就出现了。

大致说一下这个代码的流程:该代码会在你设定的时间段到达的时候(比如在上方代码中,这个断线重连代码执行的时间段为早上7点05分~7点09分之间),自动跳转到代码中的“reconect”段落,执行该段落的操作(即断线重连的前台操作)。

从我冗长的代码片段大家可以看出我是代码新手,或者说我不太会用代码里的函数,所以我一般都是流水账似的代码——但这样的代码反而更容易看懂,适合新手,所以下面我就逐条来解释这段代码的每一句话的含义,有耐心的可以看看——对代码的解释顺序从上到下,上面解释过的,下面不再解释:

  1. Hwnd = Plugin.Window.MousePoint()
复制代码


这段的意思是,当你启动代码时候,按键精灵将绑定这个时候你鼠标所指向的窗口,而之后所有的命令都将会发送到你绑定的这个窗口,从而保证一个窗口对应一个挂机脚本。

  1. Delay 1000
复制代码


这段的意思是,执行完它上面的语句后,等待1秒。按键精灵里的时间都是按毫秒计的,1秒=1000毫秒。

  1. Call Plugin.Window.SetText(Hwnd,"这里输入你需要的窗口名称")
复制代码


这段命令的作用是更改你所绑定的窗口的标题名称。他的作用在于,假设你同时开很多iKing程序,因为标题都是iKing,会不方便你在最小化后直接找到你需要激活的那个特定的角色。改了窗口标题后,找到指定角色就会非常方便

  1. Rem begin
复制代码


这个类似于原来ZKOK的%scene begin,作用也是一样,应该都可以理解。这就是你该段代码的标题

  1. a = HOUR(now)
复制代码


这里就是一个变量的赋值,意思很直接,就是“我声明,从这里开始,我代码里的【a】变量就用来代表HOUR(now)的数值”,这里Hour(now)数值是你的操作系统目前的小时时刻,接下来 b = minute(now)意思是用【b】来代表现在操作系统时间的分钟时刻。

  1. If a=07 and b>=05 and b<=09
复制代码


这段代码的用到的是if判断句式。IF判断句式必须是完整的格式,在按键精灵的语言里,if ... then ...else ...end if 是需要成套使用的。他们的意思在按键精灵视角来说,就是“如果在AA条件下,BB成立,那么我就执行CC操作,如果不成立的话,则执行DD操作,就这么些假设,结束”。

而单独这一段的命令的意思在按键精灵的视角来看,是“如果 现在操作系统的时间大于等于07点05分并且小于07点09分的话…”,也就是24小时制里,7点05~7点09分之间,需要判断一个我的假设的意思。

  1. Goto reconect
复制代码


这句的直接意思就是,现在按键精灵代码转到名为"reconect"的这个段落去执行。接上面的例子,也就是说,如果(if)现在的时间是你操作系统的7点05分~7点09分之间的话,那么(then),我们就跳转(goto)到reconect段落去。

  1. Else
复制代码


直接翻译的话,就是“否则”的意思。接上面的例子,就是如果现在的时间不在7点05~09分之间的话,我们则执行其他操作。

else 下你可以接goto到其他段落或者直接执行其他操作,如果你不设定else下方的操作,代码则继续顺延执行——这就相当于“如果条件不成立,那么我就不管了,继续该干嘛干嘛”的意思。

  1. End If
复制代码


这句话的意思就是,从if开始的假设条件,到此为止,请回归现实,该干嘛干嘛去!

  1. Call Plugin.Window.Active(Hwnd)
复制代码


这段的意思是,激活我所绑定的窗口。加入这段是防止万一出现窗口非当前窗口,无法继续执行后续操作的可能。

  1. Call Plugin.Window.Restore(Hwnd)
复制代码


这段话的意思是,将已经最小化的绑定的窗口恢复(我们通常叫这个为“最大化”,虽然这种说法其实是不正确的)到前台来。

  1. MoveTo 1091, 701
复制代码


这是一个前台鼠标命令,就是将你的鼠标移动到整个桌面的1091,701这个位置。这个位置的意义我在代码注释里已经写了,这里不再赘述。

  1. LeftClick 1
复制代码


鼠标的左键单击操作,没什么好说的

  1. Call Plugin.Bkgnd.SendString(Hwnd, "ABCDEFG")
复制代码


这个是一段后台命令,即向你绑定的这个窗口文本框中输入“ABCDEFG”,这里你需要修改为自己的帐号

  1. Call Plugin.Bkgnd.KeyPress(Hwnd, 9)
复制代码


这个是一段后台键盘命令,他会按下9号键位。这个9号键位在按键精灵的语言里是我们键盘上的tab键,在上面的命令中,我们输入过帐号后,自然需要按tab键让文本框来到密码输入栏位。为什么这样我就没必要解释了吧哈哈

  1. Call Plugin.Bkgnd.KeyPress(Hwnd, 13)
复制代码


这是后台按下enter的命令,键位13是按键精灵中Enter的键位码

  1. Call Plugin.Window.Min(Hwnd)
复制代码


这个操作是将当前的窗口最小化——在上方,我们已经完成了全部的登陆操作,然后把这个窗口最小化,桌面就干净了。

  1. Goto begin
复制代码


最后代码会自动跳转到begin段去。这里根据你的需要,可以自行决定断线重连之后代码去哪个段落执行后续操作。





以上是代码部分以及代码的解释部分,下面我说一下这个代码需要注意的事项。

这个代码的核心实际上就是这个IF判断部分,因此在代码的什么位置、什么时间段让他来进行判断是很关键的

比如在本例中,我是将IF就直接放在了代码的主段落的开头,那么假设这个主段落整个执行一轮回到开头需要用时10分钟,而我的代码进行判断的时间段是早上的7点05分到7点09分(只有4分钟的判断期间),那么则很有可能出现还没执行到IF判断这里,就已经错过了7点05~7点09这个判断的时限,从而没有办法做到断线重连。

另一方面,假设为了防止上述情况出现,你将判断时间拉长,比如拉长到7点05到8点05之间都判断为“在这个时间内”,那么你可能面临的问题就是这一小时内,只要你的代码运行到IF这个位置,就会跑去执行那个断线重连的操作1次,从而降低了你的主代码效率。

因此,你的IF放在代码的那个位置,IF的判断时间区间多长,是需要你根据自己的主代码的运行时间来自行决定的。

其次,如果你挂了多个号,那么也需要考虑每一个号执行断线重连操作的时间的错峰问题。因为断线重连部分至少有2、3分钟是在执行前台操作,因此如果这个时候你的其他挂着的号也触发了断线重连,那么你的鼠标操作肯定会出问题。简单的解决办法就是每个帐号的断线重连判断期都错开几分钟就好。

这个代码昨晚我写好后挂在那执行,三个号中两个号都正常完成了断线重连,一个号不知道什么原因没完成,或者可能是完成了然后早上特别卡的时候掉线了也有可能。。。今天我再继续观察一下。

那么这个代码就这样啦。有啥问题可以在下方留言,我不一定回答哈。
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

小黑屋|手机版|万王之王 king of kings

GMT+8, 2024-3-29 01:43

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表