[已解决] dllcall调用完美验证码识别系统
本帖最后由 king8462 于 2019-8-4 18:57 编辑网上找了个 “完美验证码识别系统”免费验证码识别软件,挺好用。自己制作好了识别库,但不会写dllcall语法,请高手帮帮忙,谢谢!
识别库密码163,这是dll语法。附件为验证码和dll及识别库文件。
----以下四个个函数用于载入识别库--------
Private Declare Function LoadWmFromFile Lib "WmCode.dll" (ByVal FilePath As String,ByVal Password As String) As Boolean
函数功能说明:从文件中载入识别库文件,成功返回True,否则返回False。
函数参数说明:
FilePath:文本型,识别库文件所在全路径。
Password:文本型,识别库调用密码
Private Declare Function LoadWmFromBuffer Lib "WmCode.dll" (ByVal FileBuffer As Long,ByVal FileBufLen As Long,ByVal Password As String) As Boolean
函数功能说明:从内存中载入识别库文件,成功返回True,否则返回False。
函数参数说明:
FileBuffer :整数型,一个记录了识别库文件的二进制数据的字节数组,或一块同样功能的内存区域。这里请提供数组第一个成员的地址,或内存区域的地址。
FileBufLen :整数型,上述字节数组的数组成员数,或内存区域大小。
Password:文本型,识别库调用密码
Private Declare Function LoadWmFromFileEx Lib "WmCode.dll" (ByVal FilePath As String,ByVal Password As String) As Long
函数功能说明:从文件中载入识别库文件,成功返回Id,失败返回-1。
函数参数说明:
FilePath:文本型,识别库文件所在全路径。
Password:文本型,识别库调用密码
Private Declare Function LoadWmFromBufferEx Lib "WmCode.dll" (ByVal FileBuffer As Long,ByVal FileBufLen As Long,ByVal Password As String) As Long
函数功能说明:从内存中载入识别库文件,成功返回Id,失败返回-1。
函数参数说明:
FileBuffer :整数型,一个记录了识别库文件的二进制数据的字节数组,或一块同样功能的内存区域。这里请提供数组第一个成员的地址,或内存区域的地址。
FileBufLen :整数型,上述字节数组的数组成员数,或内存区域大小。
Password:文本型,识别库调用密码
--------以下四个函数用于识别验证码-------------
Private Declare Function GetImageFromFile Lib "WmCode.dll" (ByVal FilePath As String,ByVal Vcode As String) As Boolean
函数功能说明:识别一个图像文件,成功返回True,否则返回False。
函数参数说明:
FilePath :文本型,图像文件所在全路径。
Vcode:文本型,返回的验证码字符串,使用该参数前需要将一个足够长的空白字符串赋值给它。
Private Declare Function GetImageFromBuffer Lib "WmCode.dll" (ByVal ImgBuffer As Long,ByVal ImgBufLen As Long,ByVal Vcode As String) As Boolean
函数功能说明:识别一个记录了图像文件的二进制数据的字节数组,或一块同样功能的内存区域,成功返回True,否则返回False。
函数参数说明:
ImgBuffer :整数型,一个记录了图像文件的二进制数据的字节数组,或一块同样功能的内存区域。这里请提供数组第一个成员的地址,或内存区域的地址。
ImgBufLen :整数型,上述字节数组的数组成员数,或内存区域大小。
Vcode :文本型,返回的验证码字符串,使用该参数前需要将一个足够长的空白字符串赋值给它。
Private Declare Function GetImageFromFileEx Lib "WmCode.dll" (ByVal Id As Long,ByVal FilePath As String,ByVal Vcode As String) As Boolean
函数功能说明:识别一个图像文件,成功返回True,否则返回False。
函数参数说明:
Id : 整数型,使用LoadWmFromFileEx或LoadWmFromBufferEx返回的Id,用来指定哪个识别库识别.
FilePath :文本型,图像文件所在全路径。
Vcode:文本型,返回的验证码字符串,使用该参数前需要将一个足够长的空白字符串赋值给它。
Private Declare Function GetImageFromBufferEx Lib "WmCode.dll" (ByVal Id As Long,ByVal ImgBuffer As Long,ByVal ImgBufLen As Long,ByVal Vcode As String) As Boolean
函数功能说明:识别一个记录了图像文件的二进制数据的字节数组,或一块同样功能的内存区域,成功返回True,否则返回False。
函数参数说明:
Id : 整数型,使用LoadWmFromFileEx或LoadWmFromBufferEx返回的Id,用来指定哪个识别库识别.
ImgBuffer :整数型,一个记录了图像文件的二进制数据的字节数组,或一块同样功能的内存区域。这里请提供数组第一个成员的地址,或内存区域的地址。
ImgBufLen :整数型,上述字节数组的数组成员数,或内存区域大小。
Vcode :文本型,返回的验证码字符串,使用该参数前需要将一个足够长的空白字符串赋值给它。
-----------以下一个函数用于设定识别库选项------------------
Private Declare Function SetWmOption Lib "WmCode.dll" (ByVal OptionIndex As Long,ByVal OptionValue As Long) As Boolean
函数功能说明:设定识别库选项。设定成功返回真,否则返回假。
函数参数说明:
OptionIndex :整数型,选项索引,取值范围1~10
OptionValue :整数型,选项数值。
参数详解:
OptionIndex OptionValue
1. 返回方式 取值范围:0~1 默认为0,直接返回验证码,为1返回验证码字符和矩形范围形如:S,10,11,12,13|A,1,2,3,4 表示识别到文本 S 左边横坐标10,左边纵坐标11,右边横坐标,右边纵坐标12
2. 识别方式 取值范围:0~4 默认为0,0整体识别,1连通分割识别,2纵分割识别,3横分割识别,4横纵分割识别。可以进行分割的验证码,建议优先使用分割识别,因为分割后不仅能提高识别率,而且还能提高识别速度
3. 识别模式 取值范围:0~1 默认为0,0识图模式,1为识字模式。识图模式指的是背景白色视为透明不进行对比,识字模式指的是白色不视为透明,也加入对比。绝大多数我们都是使用识图模式,但是有少数部分验证码,使用识字模式更佳。
4. 识别加速 取值范围:0~1 默认为0,0为不加速,1为使用加速。一般我们建议开启加速功能,开启后对识别率几乎不影响。而且能提高3-5倍识别速度。
5. 加速返回 取值范围:0~1 默认为0,0为不加速返回,1为使用加速返回。使用加速返回一般用在粗体字识别的时候,可以大大提高识别速度,但是使用后,会稍微影响识别率。识别率有所下降。一般不是粗体字比较耗时的验证码,一般不用开启
6. 最小相似度 取值范围:0~100 默认为90
7. 字符间隙 取值范围:-10~0 默认为0,如果字符重叠,根据实际情况填写,如-3允许重叠3像素,如果不重叠的话,直接写0,注意:重叠和粘连概念不一样,粘连的话,其实字符间隙为0.
Private Declare Function SetWmOptionEx Lib "WmCode.dll" (ByVal Id As Long,ByVal OptionIndex As Long,ByVal OptionValue As Long) As Boolean
函数功能说明:设定识别库选项。设定成功返回真,否则返回假。
函数参数说明:
Id : 整数型,使用LoadWmFromFileEx或LoadWmFromBufferEx返回的Id,用来指定哪个识别库识别.
OptionIndex :整数型,选项索引,取值范围1~10
OptionValue :整数型,选项数值。
-----------以下一个函数用于计算数学表达式------------------
Private Declare Function Calculator Lib "WmCode.dll" (ByVal Expression As String,ByVal CalcResult As String) As Boolean
函数功能说明:计算数学表达式。失败返回空文本,成功返回计算结果文本。功能简单,只是用来计算那些需要填写计算结果的验证码。计算完成返回真,否则返回假。
函数参数说明:
Expression :文本型,数学表达式,只能计算加,减,乘,除,次方运算,支持小括号,中括号,大括号运算,支持负数运算。
CalcResult :文本型,计算结果,使用需要将一个足够长的空白字符串赋值给它。
-----------以下两个函数用于设置文本参数为unicode格式------------------
Private Declare Function UseUnicodeString Lib "WmCode.dll" (ByVal OptionIndex As Long,ByVal OptionValue As Long) As Boolean
函数功能说明:设置传入传出dll的各个文本类型参数是否使用unicode格式,一次设置在程序运行期间有效。设置成功返回真,失败返回假
函数参数说明:
OptionIndex :整数型,选项索引,取值范围1~2
OptionValue :整数型,选项数值。取值范围:0~1
参数详解:
OptionIndex OptionValue
1. 传入是否使用unicode格式 取值范围:0~1 默认为0使用ansi格式,为1使用unicode文本
2. 传出是否使用unicode格式 取值范围:0~1 默认为0使用ansi格式,为1使用unicode文本
PS:如果要让DLL传入或传出返回Unicode格式的字符文本,必须在加载字库之前先调用这个API,使用后所有API的文本参数【传入】或【传出】都将被视为unicode文本。
https://s2.ax1x.com/2019/08/04/eyrKjP.png ;使用识别验证码的dll
$AntiDll = DllOpen ("WmCode.dll") ;识别的dll路径
;$LocalCDS = @ScriptDir&"\blog.ce.cds";识别库的路径
$index = DllCall($AntiDll,"int","LoadWmFromFile","str",@ScriptDir&"\jxjy.dat",'163')
$ImgURL = @ScriptDir&"\1.jpg"
$CdsResult = DllCall($AntiDll,"int","GetImageFromFile","int",$ImgURL,"str",0)
DllClose($AntiDll)
msgbox(0,'识别网页验证码结果',$CdsResult)
论坛里抄的这个不行,高手请帮忙修改一下。 $index = DllCall($AntiDll,"int","LoadWmFromFile","str",@ScriptDir&"\jxjy.dat",'str', '163')
$CdsResult = DllCall($AntiDll,"int","GetImageFromFile","str",$ImgURL,"str", 0) 繁星 发表于 2019-8-3 23:46
$index = DllCall($AntiDll,"int","LoadWmFromFile","str",@ScriptDir&"\jxjy.dat",'str', '163')
你好,按你的代码,$index返回还是“0”。识别不到验证码啊。 繁星 发表于 2019-8-4 13:07
LZ后面那句没改 "str",$ImgURL … 繁星 发表于 2019-8-4 13:07
谢谢!搞定了,早上可能是我电脑的问题。 不错支持一下
页:
[1]