按键精灵如何制作后台脚本

按键精灵如何制作后台脚本,第1张

// 这是获取当前窗口句柄
Plugin hwnd = WindowGetKeyFocusWnd()
Delay 1000
Rem start
Delay 200
Plugin WindowSendKeyPress(hwnd, 49)
Delay 200
Plugin WindowSendKeyPress(hwnd, 50)
Delay 200
Plugin WindowSendKeyPress(hwnd, 51)
Delay 200
Plugin WindowSendKeyPress(hwnd, 52)
Goto start
每个窗口都有不同的句柄 你只要获得了当前窗口的句柄, 就可以实现后台对其 *** 作了 WindowSendKeyPress(hwnd, 49) 是对句柄为 hwnd 的窗口发送
一个1 就是按了一下键盘上的1 快去试试吧

这是按键精灵的一个后台运行程序,使用时要先将鼠标移动到你要 *** 作的窗口。已改成非循环。
hwnd
=
pluginwindowmousepoint()
call
pluginbkgndrightclick(hwnd,
x,y)
 
//x,y为你要右键单击的第一个坐标
delay
1000
//设置延时
call
pluginbkgndrightclick(hwnd,
x,y)
 
//x,y为你要右键单击的第二个坐标

我来试着回答一下 // //这个符号之间的内容是注释,和我的解释。希望楼主能看懂。标题名需要你自己填的。 我会标出来告诉你怎么填。如果不能用可以试一下延迟。后面有详细的解释。
先按照你第一个的
Hwnd = PluginWindowFind(0, "标题名")
For 7
Call PluginBkgndKeyPress(Hwnd, 38)
Call PluginBkgndKeyPress(Hwnd, 40)
Call PluginBkgndKeyPress(Hwnd, 90)
Next
第二个的
Hwnd = PluginWindowFind(0, "标题名")
For 7
Call PluginBkgndKeyPress(Hwnd, 90)
Next
这一段是如何取标题名。打开按键精灵的抓抓,点句柄,点获取,把鼠标放在网页的最上面,再点获取,把当前窗口标题名复制下来,把复制的替换到上面的代码里。OK了。如果不会取标题名就往后看,有很详细的。
如果不用延迟恐怕用不了。后面除了有延迟1秒的代码之外 其他的全是详细的解释如果能用了不看也行。也许能帮你找到原因。
下面是解释可以当废话处理,能用了不需要浪费时间看

以上脚本的想法:让按键精灵通过类名和标题名帮你取你那个网页游戏的句柄,并存入Hwnd中(无论句柄怎么变都没关系,因为每次都帮你取得当前的句柄)然后进行后台 *** 作按键。如果不会,看下面有解释,包括标题名的怎么获得。
如果不需要延迟把这一段跳过和下面的代码。(另外我很奇怪按7次UP键什么的不用延时 *** 作么?如果需要,第一个可以把 Delay 1000 加在第三行和第四行之间,第四行和第五行之间,第五行和第六行之间。第二个加在第二行和第三行之间。也就是延迟一秒进行下一条语句。)
第一个加了延迟的
For 7
Call PluginBkgndKeyPress(Hwnd, 38)
Delay 1000
Call PluginBkgndKeyPress(Hwnd, 40)
Delay 1000
Call PluginBkgndKeyPress(Hwnd, 90)
Delay 1000
Next
第二个加了延迟的
For 7
Call PluginBkgndKeyPress(Hwnd, 90)
Delay 1000
Next
楼主说要只针对这个网页游戏。我们这样做,取那个网页游戏的句柄。
需要说明一下,句柄是系统随机分配给每个区域的。也就是你打开那个网页游戏,有一个句柄,当你关了再开又是另一个句柄了。不过没关系,下面我会让按键精灵帮你取句柄,但是还是要自己取第一次把标题名填了。免得每次自己取,而且还得填入脚本应该填的地方。如果你喜欢每次自己取那就把Hwnd = PluginWindowFind(类名, "标题名")去掉,把你取到的句柄替换后面所有的Hwnd并且两边加上这个符号'' ''
Hwnd = PluginWindowFind(类名, "标题名")
//这个语句的意思是你提供2个参数他给你找句柄。//上面括号里面的是两个参数,分别是要取句柄的那个窗口的{类名}和{标题名}也就是需要你自己填。上面这条语句的 标题名 换成你的那个网页游戏的标题名,类名填数字 0 就可以了,类名填0的话不用加任何符号。注意标题名两边加这个符号'' 是英文的符号,不是中文的标点符号。开头的Hwnd现在储存的就是你那个网页游戏的句柄,你如果不喜欢用Hwnd也可以任意换成其他的,只要后面的Hwnd也换了。再哪个后台 *** 作就靠它了。楼主会问标题名怎么知道?下面来弄标题名。我是用句柄来得出标题名的。问题又来了,句柄还没的出来呀?没错。我们可以用其他方法来得句柄。其实下面这个方法能得到网页的当前句柄,标题名,类名,只不过不会直接填写的脚本里,需要你每次自己得到句柄自己填,很麻烦。之前不是说句柄会变么。我们现在就取当前网页的句柄。下面这样做,按键精灵里有个抓抓,在按键精灵页面的上面。就是抓图的那个工具,楼主应该能找到。打开抓抓,左面分别写着颜色,图像,鼠标,句柄。现在我们点句柄,在里面找 获取 ,获取的快捷键是F8。楼主一看就就会明白。按一下获取(这时鼠标移动到不同区域时,当前窗口句柄,当前句柄类名,当前窗口标题都会变化。但是不用管它)把鼠标放在你那个网页游戏的标题框上,(我也不知道那个叫不叫标题框,反正我就这么叫了。)也就是你能按住左键拖动窗口时的那个区域,就是网页的最上面。(也许你会发现把鼠标放在网页的不同位置句柄会不一样,这就是让你把鼠标放在标题框的原因。注意,这里句柄不一样的原因是相对网页位置不同了引起的变化,而不是我之前所说的句柄每次变的原因。)再按一下 获取。这时候鼠标再动显示的句柄,类名,标题就都不变化了(因为为了方便你记录所以定格了,所以才不变了。)把当前窗口标题复制下来。还记得上面出现过的这个么? Hwnd = PluginWindowFind(类名, "标题名")
把标题名三个字替换成你刚才复制的。把类名两个字替换成 0 (不是字母O 是数字0)。句柄取完了。下面说按那几个键。复制就行了没有自己填的。
Call PluginBkgndKeyPress(Hwnd, 38)
Call PluginBkgndKeyPress(Hwnd, 40)
Call PluginBkgndKeyPress(Hwnd, 90)
//上面括号里面的是2个参数,其中Hwnd你的那个网页游戏的句柄,数字是你要按的UP DOWN 和Z键的虚拟码。//
如果怎么得也用不了请看这里。上面说句柄是系统随机分配给每个区域的。比如说,你打开那个网页游戏,有一个句柄,当你关了再开又是另一个句柄了。同一窗口的不同区域句柄也可能是不一样的。如果怎么得也用不了可能是句柄取错了。记得怎么用抓抓取那个标题名吧。不把鼠标放在标题栏上,放在网页其他区域取标题名,替换上去试试。希望你能满意。

1、游戏句柄
后台的意思就是当窗口被遮盖或移开的时候,仍能够正常的执行脚本动作,所以必须先找到该游戏的窗口句柄,这样可以保证我们编辑的脚本语句有正确的使用方向,获取窗口句柄的方法有很多,我一般使用以下的方法:
Dim hwnd
Plugin hwnd=WindowMousePoint()
Plugin是调用插件命令,凡是调用插件都需要使用这个命令,hwnd就是得到的句柄,Window是插件的名称MousePoint()返回鼠标所在的窗口的句柄
关于窗口这里需要多说几句,以网页游戏为例,鼠标放在标题栏上和放在游戏窗口所得到的句柄是不一样的,游戏窗口是IE的一个子窗口,因此在运行脚本前,将你的鼠标放在游戏窗口的区域内再运行脚本。
得到句柄费函数很多,有兴趣的自己去试试看,不过知道一个就足够了。
2、模拟动作
得到窗口句柄后,你就可以向这个窗口模拟需要的动作了,在这里要用到按键精灵7的插件(既然已经有7了以前的插件就不作介绍了),模拟动作的函数有如下几个
-模拟鼠标点击
Plugin BkgndLeftClick(句柄,横坐标,纵坐标) //模拟鼠标左键点击
Plugin BkgndRightClick(句柄,横坐标,纵坐标) //模拟鼠标右键点击
其中的句柄就是上面我们已经得到的句柄,这里的横坐标和纵坐标是针对游戏窗口,而不是针对屏幕的(看晕了吧^_^关于这一点足足困扰了我一个礼拜的时间才弄明白)。
屏幕坐标,是以屏幕左上角为基点(0,0),右下角的坐标是和屏幕分辨率有关的,而窗口坐标,不是在屏幕的左上角,例如word中的编辑窗口的0,0位置是在工具栏下面的,看不懂也没关系,你只要记住下面的方法就行了,首先在得到窗口句柄后加上如下的代码:
Plugin s = WindowGetClientRect(hwnd)
XYArray = Split(s, "|", -1, 1)
dx = XYArray(0)
dy = XYarray(1)
其次,在横坐标和纵坐标的后面都分别减去dx和dy就行了,为什么!!不用去管他,反正这样做不会错,举例说明
例如你抓点得到的横坐标是x,纵坐标是y,那么模拟鼠标左键点击的语句应该是这样的:
Plugin BkgndLeftClick(句柄x-dx,y-dy)
-模拟键盘动作
Plugin BkgndKeyPress(句柄,按键码) //模拟键盘动作
这里的按键码可以很容易的在按键精灵中查到,包括组合键
-输入字符串
Plugin WindowSendString(句柄,字符串)
这个函数在登陆和喊话时是非常有用的,其中的字符串可以是字符串变量
3、后台找色
后台脚本尽量少用找色语句,否则你的游戏将“卡巴死机”,即使少用也会出现很多的“马赛克”幸运的是不影响找色功能,即使游戏图像已经乱七八糟,既然是要后台 *** 作,难看就难看吧^_^。
Plugin c1=BkgndColorGetPixelColor(hwnd,631-dx,121-dy)
强烈建议用这个函数,至于什么区域找色,区域照图之类,如果你的电脑速度足够快再去尝试吧。
找色是有技巧的,一定要找到一个不同画面分别对应不同颜色的点,当然只有一个点是不可靠的。我的思路是,找到几个点的颜色值记录下来,再根据这几个点的不同组合来决定脚本的走向,采取这种方法后,我在游戏时已经基本可以看到大体的画面了。
附一个网页游戏《明朝时代》61级刷铁矿的简单例子(我就用的这个脚本:)):
Dim hwnd
Plugin hwnd=WindowMousePoint()
Plugin s = WindowGetClientRect(hwnd)
XYArray = Split(s, "|", -1, 1)
dx = XYArray(0)
dy = XYarray(1)
vx = 655-dx
vy = 336-dy
vx1 = 638-dx
vy1 = 305-dy
For 1000
Delay 156
Delay 16
Plugin BkgndLeftClick(hwnd,vx,vy)
Delay 7000
Delay 500
Plugin BkgndLeftClick(hwnd,vx1,vy1)
Delay 1000
EndFor
Rem


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10307226.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-07
下一篇 2023-05-07

发表评论

登录后才能评论

评论列表(0条)

保存