当前位置:文档之家› 大漠插件字库原理介绍

大漠插件字库原理介绍

首先说明下大漠综合工具制作字库的过程和原理

1.截取你所需要的图片

2.点击你所需要字的颜色

3.点击提取点阵

4.输入字符按回车生成字库

具体的原理我不好说,但是就我的理解是:对图片中不符合指定颜色的部分去除掉,然后二值化获取点阵,点阵也就是这些颜色的分布规律,二值化就是黑白两色,RGB格式中黑色"000000"白色"ffffff"

由于我的脚本在别人电脑上运行的时候经常失效,今天改成16位色后我机器上运行也失效了,而我这个脚本主要采用的就是大漠插件的找字功能,我以为是机器间的色偏造成的,一直想法子算色偏,但是我失败了。

后来我想起论坛上有个帖子专门讲过同色系的RGB格式中R值是不变的(不好意思忘了作者了,在这里致谢)

于是我就在大漠综合工具的色偏处输入了00ffff结果是在16位色环境下,大漠综合工具中二值化区域内的字显示的跟我在32位色环境下做的一模一样,接着我提取点阵,制作字库,进行调试,命令格式如下:

dm_ret =dm.FindStr(0,0,978,585, "码", "ffd463-00ffff", 1.0, x1, y1)

If x1 >= 0 Then

MessageBox x1 & y1

End If

准确的弹出了x,y的坐标值

接着我换32位色做同样的调试,显示结果与16位色下相同,我测了坐标正好是我要找的字的左上角

经多次测试发现这个方法中字色的R值必须为FF或00(至于F1,01等未测试,有兴趣的朋友可以试试)

庆幸啊以后找字可以不考虑偏色了呵呵再说了考虑我也不会算

具体原理我也不是很懂,但是我估计应该是:我比较了点阵中R值相同的所有点,取得符合二值化点阵区域内所有的点造成的

再次提醒此方法只适合R值为00,FF的其他位置相同的未测试

当然这么做效率是低了点,但是在我看来脚本应该是:稳定性>通用性>执行效率,毕竟脚本也是你编写的一种软件吗

鲜花,银币在哪拿来啊呵呵

简单说下后台操作的方法,先判断该窗口是否支持后台,用下面的语句:

Hwnd=Plugin.Window.Foreground()

Hwmd=Plugin.Window.GetkeyFocusWnd()

If Hwmd<>0 then

Messagebox "可以"

Else

Messagebox "不可以"

End if

然后把下面的放在脚本开头

Hwnd=Plugin.Window.Foreground()

Hwnd=Plugin.Window.GetkeyFocusWnd()

//下面接自己的代码

首先后台一点是要有句柄、这个很简单

第一步我们先打开抓抓,接着点击句柄接着把鼠标移到你所要后台的窗口上,按下F8 是否看见当前窗口句柄那里出现一串数字?把它复制下来

第二步我们点击图像,在指定窗口句柄那里打钩接着把数字复制进去按下抓图键(Print Screen SysRq) 是否只看见你要后台的的图像呢?对着你所需要的坐标按右键加入点1 记住坐标然后加入到后台鼠标点击里面就行了

第三步我们在后台命令中找到鼠标指向窗口点击插入命令是Hwnd = Plugin.Window.MousePoint()

第四步我们要进行后台鼠标点击或者后台输入键盘命令是Call Plugin.Bkgnd.LeftClick(Hwnd, 0, 0)

在按键看了很多教程关于"多开..."的我看了后回味,似乎都是单线程的,往往新手会问,难道不能让精灵同事做2件事情吗?新手问的其实是问:按键可以多线程后台吗?由此我突然奇想且试验成功.且次试验可将任何的单开后台变为多开后台脚本.如有愚昧的地方指指教了.

作业:

设计一个在记事本上后台打字"1"的循环代码

要求:能循环多开

Hwnd = Plugin.Window.MousePoint()

rem a

Call Plugin.Bkgnd.KeyPress(Hwnd, 49)

Delay 500

goto a

注:8.0写的如只有7的同学自己翻译不太难的

回复后能见教程

本帖隐藏的内容需要回复才可以浏览

第一步:将禁止脚本重复运行选为否(在是否循环的下面)

第二步:设置启动热键为F2(以免与记事本热键冲突)

第三步:保存退出(或选调试)

第四步:打开第一个记事本文件,鼠标指中按F2,此时可看见后台打的111出现最小化

第五步:打开第二个记事本文件,鼠标指中按F2,此时可看见后台打的111出现最小化

........

此时你如果将多个记事本都打开看他们都在干活呢-------可以无限后台多开-多线程的

总结:第一步很关键.

启示:如果我做的"打1"的脚本换成打怪的呢?

第1步:什么是后台插件及命令

首先我们要明白什么是后台插件以及后台命令,在编辑窗口找到全部命令,找到窗口插件(建议大家可以站内搜一下361插件,下载后放进去,看一下361插件的命令),点开后点击每一条命令仔细看说明,对比每条命令跟前台命令的对应关系,这样我们就可以把对应的前台命令转换为后台命令了。

第2步:窗口句柄的概念以及如何找出窗口句柄

操作系统种每打开一个窗口就会相应的为这个窗口做一个记号,他是用一串数字表示,也就是我们所要找的窗口句柄了(新手的理解方式不知道准确不^-^),这个东西对我们后台操作来说是最重要的,你在查看插件命令的时候都会看到,我们每个命令后面跟的参数里面都有个hwnd,他其实就是窗口句柄变量。怎么样理解窗口句柄其实很简单吧

第3步:窗口坐标(可以理解为后台坐标)

窗口坐标是指游戏窗口里面的坐标,如果我们把屏幕坐标比作绝对坐标,那么窗口坐标就是个相对坐标了,我们平时用抓抓找出的坐标就是屏幕坐标,所以他是不能直接在后台用的。其实不用对窗口坐标很烦恼,如果你下载了361插件,有个很简单的方法可以直接找出窗口坐标网页游戏开服表

Plugin hw=Window.MousePoint()

Plugin text=Window.GetText(hw)

Plugin class1=Window.GetClass(hw)

VBSCall GetCursorPos(x,y)

Plugin win=BGKM5.ScrToCli(hw,x,y)

MessageBox "窗口句柄:"&CStr(hw)&VbCrLf&"窗口名:"&text&VbCrLf&"类名:"&class1&VbCrLf&"鼠标所在位置的窗口坐标:"&win

这段代码是从361插件哪里抄来的^-^如果不理解的话你在下载361插件的时候应该那里

能看到说明

把这段做成脚本你就可以很方便的找到你需要的点的窗口坐标,省去了在脚本中加入窗口坐标转换的麻烦。

第4步:定义窗口句柄变量

这步是你是否成功的关键,窗口插件里面可以看到很多定义窗口变量的命令(这个是361里面没有的,在窗口插件里面找吧),我个人喜欢用的是这条:Plugin

hw=Window.MousePoint()

大致意思是找出当前鼠标说在窗口的窗口句柄(hw是自己定义的变量,你可以更改它,一般多数地方是hwnd,你可以用你自己喜欢的方式定义)

注:前后台命令的区别

基本上到第4步我们已经能够做出后台脚本了,但是有很多新学的朋友(比如我^-^)还是要问前台命令和后台命令到底怎么回事啊??我给自己解释一下,用几个例子来比较吧(我用的361插件命令)

鼠标左键:前台(LeftClick 1)后台Plugin BGKM5.LClick(参数1,参数2,参数3)}鼠标移动:前台moveto (参数1,参数2)后台Plugin BGKM5.Mouse(参数1,参数2,参数3)

键盘按键(回车键):前台keypress(13,1)后台Plugin BGKM5.KeyClick(参数1,13) 看出区别了吧,首选后台命令都有一个“Plugin”这个东西是调用插件命令的意思,不用管它了,网页游戏开服表https://www.doczj.com/doc/8918023044.html,主要区别在参数那里,后台命令里面动作参数都要比前台多一个,就是那个参数1,其实那个东西就是窗口句柄了,也就是说我们自己开始定义的那个变量hwnd,到这里应该都明白了吧,如果不明白那你比我还笨咯,努力吧^-^

写在最后,还在继续努力学习中如果有新的心得的话我还会继续写成系列的

361后台找图插件的按键8代码使用方法【收】

Rem a

//这里面的sx和sy就是x和y的左边值是一开始我用另一段语句定义sx,sy为起始坐标Delay 50

//鼠标点击游戏内打开任务栏的位置

Call Plugin.Bkgnd.LeftClick(Hwnd,sx + 444, sy + 555)

Delay 200

//鼠标移动到起始点避免找图时被鼠标遮挡

Call Plugin.Bkgnd.MoveTo(Hwnd, Sx, Sy)

Delay 300

//在游戏窗口内0, 0,1000, 1000 的范围内找能确定任务栏打开的那个图

Call Plugin.BGCP2.FindPicture(hwnd, 0, 0,1000, 1000 ,"C:\任务.bmp",30,0.9,x,y)

//如果找不到可能是没有点开从新返回a点击并找图直到点开找到为止

//找不到时返回的值是-1 所以用“<0”来判断

If x<0 And y<0

goto a

//判断结束,也就是说找到了

EndIf

//这时候你可以执行下一步了

这个是361°后台插件放在按键精灵的plugin目录下

//得到当前鼠标指向的窗口的句柄赋值给hwnd

Hwnd = Plugin.Window.MousePoint()

//找图前先转换句柄为hwnd的窗口

Call Plugin.BGCP2.TransformWindow(hwnd)

//OnScriptExit过程在脚本结束时执行,即使脚本执行到一半的时候,你按了停止热键,它也会执行了这个过程再停止,这样能保证占用的资源被释放

Sub OnScriptExit

//将前面转换的窗口还原

Call Plugin.BGCP2.UnTransformWindow(hwnd)

End Sub

一段简单实用的代码,不会取后台坐标的进来回复。绝对值。

实时显示光标所在屏幕坐标,所在当前窗口窗户区坐标,16进制颜色&R,G,B三色!!有些朋友不明白我这帖子的意思。现在再来说说,我这个不是什么后台命令,只是取坐标和颜色的。只要鼠标在当前窗口中,屏幕上显示的客户区坐标就是后台要用的坐标。

While 1

Plugin jb=Window.GetKeyFocusWnd()

Plugin kb=Window.GetClientRect(jb)

bxy=split(kb,"|")

VBSCall GetCursorPos(x,y)

VBSCall GetColor=GetPixelColor(x,y)

Plugin Color.ColorToRGB(GetColor,R,G,B)

If x-int(bxy(0))>0 and y-int(bxy(1))>0 and x-(int(bxy(2))+int(bxy(0)))<0 and y-(int(bxy(3))+int(bxy(1)))<0

stxt="当前光标所在屏幕坐标"&x&"."&y&" 当前光标所在窗口客户区坐标"&x-bxy(0)&"."&y-bxy(1)&" 光标指向处颜色"&GetColor&" R="&R&" G="&G&" B="&B&" "

Plugin Msg.ShowScrTXT(200,0,1024,768,stxt,"FF0000") Else

stxt="当前光标所在屏幕坐标"&x&"."&y&" 当前光标所在窗口客户区坐标0.0 光标指向处颜色"&GetColor&" R="&R&" G="&G&" B="&B&" "

Plugin Msg.ShowScrTXT(200,0,1024,768,stxt,"0000FF") EndIf

Delay 100

EndWhile

一直以来都不知道在VBS执行块里怎么插入找图、找色等按键本身的命令,有的人说不能用

VBSBegin

'需要插入的VBS代码

GetColor=GetPixelColor(10,5)

msgbox "得到颜色值为:" & GetColor

Call FindColor(0,0,1024,768,"FFFFFF",intX,intY)

If intX>0 And intY>0 Then

msgbox intX & "," & intY

MoveTo intX,intY

End If

'找图类似

Call FindPic(0,0,1024,768,"Attachment:\神盾.bmp",0.9,intX,intY) If intX>0 And intY>0 Then

msgbox intX & "," & intY

MoveTo intX,intY

End If

VBSEnd

使用插件调用方法!

Import color.dll

VBSBegin

'需要插入的VBS代码

a=Color.GetRGB(255,255,255)

msgbox a

VBSEnd

一直以来按键精灵都无法支持结构这种做法,我们只能模拟类似方法!

例子模拟:让按键精灵支持结构排序!!

//语法格式:数组() = "数字大小=值"

dim NB_PaiXu(9)

NB_PaiXu(0) = "200=A"

NB_PaiXu(1) = "3=B"

NB_PaiXu(2) = "5=C"

NB_PaiXu(3) = "4=D"

NB_PaiXu(4) = "9=E"

NB_PaiXu(5) = "7=F"

NB_PaiXu(6) = "12=G"

NB_PaiXu(7) = "94=H"

NB_PaiXu(8) = "60=I"

NB_PaiXu(9) = "60=J"

Gosub 【最牛排序的算法】

MsgBox "得到结果:" & PaiXu

EndScript

Sub 【最牛排序的算法】

//〈————————————————————初始赋值

Int_A = 0: Int_Num = UBound(NB_PaiXu)

For Int_Num

Int_B = Int_A: Int_Len = Int_Num - Int_B + 1

For Int_Len

//〈————————————————根据“=”号分离,进行大小判断

A_Str = Split(NB_PaiXu(Int_A), "="): B_Str = Split(NB_PaiXu(Int_B), "=")

If Clng(A_Str(0)) > Clng(B_Str(0))

Int_Temp = NB_PaiXu(Int_A): NB_PaiXu(Int_A) = NB_PaiXu(Int_B): NB_PaiXu(Int_B) = Int_Temp

EndIf

Int_B = Int_B + 1

EndFor

Int_A = Int_A + 1

EndFor

//〈————————————————————排序结果

PaiXu = Join(NB_PaiXu)

//〈————————————————————返回最大值

//PaiXu = NB_PaiXu(Int_Num)

//〈————————————————————返回最小值

//PaiXu = NB_PaiXu(0)

Return

关于自定义界面问题

很多用户在使用UserVar用户变量时,想使用数组变量;但是按键不支持UserVar数组的定义,那该如何解决呢?

下面还是写代码举例吧:

//按键脚本例子

//按键用户设置变量的脚本

UserVar HP=0 补血量

UserVar MP=0 补蓝量

Msgbox HP & " " & MP

'VB界面代码

'在界面上放2个Txet1文本控件,做成数组(不懂做数组控件的可以先放一个Txet1文本控件,然后选它,Ctrl+C复制,在Ctrl+V粘贴出来,选择【确定】即可变为数组了)

Public Sub OnSave()

ClearControlData '固定位置,不需要进行修改

'*********************************************************** ***以下的内容,可以自己修改或者删除

Call SaveControlData("HP", Text1(0).Text) 'HP为用户自定义变量名,控件数组值

Call SaveControlData("MP", Text1(1).Text) 'MP为用户自定义变量名,控件数组值

End Sub

Public Sub OnLoad()

'*********************************************************** ***以下的内容,可以自己修改或者删除

Text1(0).Text = LoadControlData("HP") '控件数组值= HP为用户自定义变量名

Text1(1).Text = LoadControlData("MP") '控件数组值= MP为用户自定义变量名

End Sub

'这样就可以随便使用控件数组了。不影响脚本自定义变量名

无限循环

大家都知道按键精灵脚本可以自定义循环,按键精灵本身也可设置无限循环

但有没有人发现自定义循环次数那输入-1,可以执行无限循环,即使按键精灵本身没有设置无限循环,也可以执行无限循环

特别是打包成小精灵时,只要在自定义循环输入窗口那输入-1,就可以使想要的那段脚本执行无限循环

1.

https://www.doczj.com/doc/8918023044.html,erVar Var1=-1 输入-1可无限循环

3.For Var1

4.LeftClick 1

5.EndFor

复制代码

--!不错。。新发现。。。鼓励下。

按键事有无限循环的WHite 这事条件循环条件为真的时候循环只要设置一个永远为真的值就事无限循环了比如

例子1

a=1

white a=1

例子2

white 1 //非0值为真,0值为假

例子3

white true //true 是真的意思(我一般这样用)

还有向跳转GOTO也可以做到无限循环。。。。。

例子

REM 1 //定义一个标签(记)1

goto 1 // 跳到标签1.。。

/现在就MsgBox函数操作简单简绍用法

//字符串提示换行写法

MsgBox "a"&vbcr&"b"&vbcr&"c"

//或者使用chr(13),chr(10)效果一样

MsgBox "a"&chr(13)&"b"&chr(10)&"c"

//带有警告标志的窗口

MsgBox "a"&chr(13)&"b"&chr(10)&"c",16

//显示确定取消按钮

MsgBox "a"&chr(13)&"b"&chr(10)&"c",1

//让窗口显示到最前写法

MsgBox "a"&vbcr&"b"&vbcr&"c",4096

//让窗口显示标题

MsgBox "a"&vbcr&"b"&vbcr&"c",4096,"天那边"

//hehe综合一下,让窗口显示换行+警告标志+显示确定取消按钮+默认为取消+最前+标题MsgBox "a"&vbcr&"b"&vbcr&"c",16+1+256+4096,"天那边"

//写到这里大家一定明白了吧。关键是buttons项的设置值其中的可以是数字也可以是表达式我一般采用表达式,这样可以使自己看到msgbox语句的属性

//这里再来举个msgbox的返回值例子如下:

dim a

a=MsgBox ("a"&vbcr&"b"&vbcr&"c",16+1+256+4096,"天那边")

If a=1

MsgBox "您点击了确定"

Else

If a=2

MsgBox "您点击了取消"

EndIf

EndIf

EndScript

相关主题
文本预览
相关文档 最新文档