次世代验证码识别系统

需要 

AntiVC.dll文件 

次世代验证码识别系统   

http://antiyzm.sinaapp.com/archives/category/detail

 

unit Delphi7;

interface

uses
  Windows, Classes, Graphics, Controls, Forms,
  ExtCtrls, StdCtrls, jpeg;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Image1: TImage;
    Edit3: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  CdsIndex:integer;
  path: array[0..256] of Char;

function LoadCdsFromFile(CdsFile:string;Password:string):integer;stdcall;external 'AntiVC.dll'name 'LoadCdsFromFile';
function LoadCdsFromBuffer(FileBuffer:Pointer;FileBufLen:integer;Password:string):integer;stdcall;external 'AntiVC.dll' name 'LoadCdsFromBuffer';
function GetVcodeFromFile(CdsFileIndex:integer;FilePath:string;Vcode:string):boolean;stdcall;external 'AntiVC.dll' name 'GetVcodeFromFile';
function GetVcodeFromBuffer(CdsFileIndex:integer;ImgBuffer:Pointer;ImgBufLen:integer;Vcode:string):boolean;stdcall;external 'AntiVC.dll' name 'GetVcodeFromBuffer';
function URLDownloadToFile(pCaller:integer;szURL:string;szFileName:string;dwReserved:Integer;lpfnCB:Integer):Integer;stdcall;external 'urlmon.dll' name 'URLDownloadToFileA';

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  GetCurrentDirectory(SizeOf(path), path);
  Self.Edit1.Text := path + '\网易论坛.cds';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  mStream: TMemoryStream;
begin
  //以下演示LoadCdsFromFile函数
  CdsIndex := LoadCdsFromFile(Edit1.Text,'thisisdemo'); //填入密码  加载对应的识别库文件  
  //以下演示LoadCdsFromBuffer函数
//  mStream := TMemoryStream.Create;
//  mStream.LoadFromFile(Edit1.Text);
//  CdsIndex := LoadCdsFromBuffer(mStream.Memory,mStream.Size,'thisisdemo');
  if(CdsIndex <> -1) then
  begin
    Button2.Enabled := True;
    Button3.Enabled := True;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  tf:string;
begin
  tf := path + '\temp.JPG';
  URLDownloadToFile(0,Edit2.Text,tf,0,0);
  //Image1.Picture.LoadFromFile(tf);
  Image1.Visible := true;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  result: string;
  tf:string;
  mStream: TMemoryStream;
begin
  tf := path + '\temp.JPG';
  result := StringOfChar(' ',256); //预置字符串,以开辟一个空间接收返回的验证码
  //以下为GetVcodeFromFile函数演示
  //GetVcodeFromURL与此类似,只是把tf换成验证码地址
//  if(GetVcodeFromFile(CdsIndex,tf,result)) then
//  begin
//    Edit3.Text := result;
//  end
  //以下为GetVcodeFromBuffer函数演示
  mStream := TMemoryStream.Create;
  mStream.LoadFromFile(tf); {把文件读入内存流,借此演示内存调用方式}
  if(GetVcodeFromBuffer(CdsIndex,mStream.Memory,mStream.Size,result)) then
  begin
    Edit3.Text := result;
  end
end;

end.
object Form1: TForm1
  Left = 449
  Top = 286
  Caption = 'AntiVC.dll'#30340'Delphi'#35843#29992#20363#31243
  ClientHeight = 239
  ClientWidth = 316
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object Label1: TLabel
    Left = 16
    Top = 8
    Width = 185
    Height = 13
    AutoSize = False
    Caption = #35831#35774#32622#35201#36733#20837#30340'cds'#25991#20214#36335#24452
  end
  object Label2: TLabel
    Left = 16
    Top = 72
    Width = 185
    Height = 13
    AutoSize = False
    Caption = #35831#35774#32622#39564#35777#30721#22270#20687#19979#36733#22320#22336
  end
  object Image1: TImage
    Left = 16
    Top = 128
    Width = 165
    Height = 65
  end
  object Edit1: TEdit
    Left = 16
    Top = 40
    Width = 289
    Height = 21
    ImeName = #20013#25991'('#31616#20307') - '#25628#29399#25340#38899#36755#20837#27861
    TabOrder = 0
  end
  object Edit2: TEdit
    Left = 16
    Top = 96
    Width = 289
    Height = 21
    ImeName = #20013#25991'('#31616#20307') - '#25628#29399#25340#38899#36755#20837#27861
    TabOrder = 1
    Text = 'http://bbs.ent.163.com/bbs/checkcode.jsp?1201359681906'
  end
  object Button1: TButton
    Left = 211
    Top = 138
    Width = 97
    Height = 24
    Caption = #36733#20837'CDS'#25991#20214
    TabOrder = 2
    OnClick = Button1Click
  end
  object Button2: TButton
    Left = 208
    Top = 168
    Width = 97
    Height = 24
    Caption = #19979#36733#39564#35777#30721
    Enabled = False
    TabOrder = 3
    OnClick = Button2Click
  end
  object Button3: TButton
    Left = 208
    Top = 208
    Width = 97
    Height = 24
    Caption = #35782#21035#39564#35777#30721
    Enabled = False
    TabOrder = 4
    OnClick = Button3Click
  end
  object Edit3: TEdit
    Left = 16
    Top = 211
    Width = 165
    Height = 21
    ImeName = #20013#25991'('#31616#20307') - '#25628#29399#25340#38899#36755#20837#27861
    TabOrder = 5
  end
end
用法说明:

使用时,请先载入识别库,然后才可以识别验证码。识别库只需成功载入一次,不要多次重复载入同一个识别库。可

以同时载入多个不同的识别库,载入类函数将返回一个整数,这个整数标示了不同的识别库,在调用识别类函数时,

指定识别库索引,即可使用指定的识别库。

------------以下两个函数用于载入识别库--------
Private Declare Function LoadCdsFromFile Lib "AntiVC.dll" (ByVal FilePath As String,ByVal Password As 

String) As Long
函数功能说明:从文件中载入识别库文件,返回识别库索引,以便后面的函数调用。返回-1代表载入出错。
函数参数说明:
FilePath  :文本型,识别库文件所在全路径。
Password  :文本型,识别库调用密码

Private Declare Function LoadCdsFromBuffer Lib "AntiVC.dll" (ByVal FileBuffer As Long,ByVal FileBufLen As 

Long,ByVal Password As String) As Long
函数功能说明:从内存中载入识别库文件,返回识别库索引,以便后面的函数调用。返回-1代表载入出错。
函数参数说明:
FileBuffer :整数型,一个记录了识别库文件的二进制数据的字节数组,或一块同样功能的内存区域。这里请提供数组

第一个成员的地址,或内存区域的地址。
FileBufLen :整数型,上述字节数组的数组成员数,或内存区域大小。
Password  :文本型,识别库调用密码

--------以上两个函数选择其一即可---------------

--------以下五个函数用于识别验证码-------------
Private Declare Function GetVcodeFromFile Lib "AntiVC.dll" (ByVal CdsFileIndex As Long,ByVal FilePath As 

String,ByVal Vcode As String) As Boolean
函数功能说明:使用识别库索引对应的识别库,识别一个图像文件,成功返回True,否则返回False。
函数参数说明:
CdsFileIndex :整数型,识别库索引,用于确定这个图像文件对应哪个识别库。
FilePath :文本型,图像文件所在全路径。
Vcode  :文本型,返回的验证码字符串,使用该参数前需要将一个足够长的空白字符串赋值给它。

Private Declare Function GetVcodeFromBuffer Lib "AntiVC.dll" (ByVal CdsFileIndex As Long,ByVal ImgBuffer 

As Long,ByVal ImgBufLen As Long,ByVal Vcode As String) As Boolean
函数功能说明:使用CdsFileIndex对应的识别库,识别一个记录了图像文件的二进制数据的字节数组,或一块同样功

能的内存区域,成功返回True,否则返回False。
函数参数说明:
CdsFileIndex :整数型,识别库索引,用于确定这个图像文件对应哪个识别库。
ImgBuffer :整数型,一个记录了图像文件的二进制数据的字节数组,或一块同样功能的内存区域。这里请提供数组

第一个成员的地址,或内存区域的地址。
ImgBufLen :整数型,上述字节数组的数组成员数,或内存区域大小。
Vcode :文本型,返回的验证码字符串,使用该参数前需要将一个足够长的空白字符串赋值给它。

Private Declare Function GetVcodeFromHWND Lib "AntiVC.dll" (ByVal CdsFileIndex As Long,ByVal HWND As 

Long,ByVal lpRect As Long, ByVal Vcode As String,ByVal DebugMode As Long) As Boolean
函数功能说明:使用CdsFileIndex对应的识别库,从某个窗口或控件中截取全部或部分区域截图,并自动识别后返回

。这个函数支持从隐藏的窗口或控件中截图,但不支持最小化的窗口或控件。
函数参数说明:
CdsFileIndex :整数型,识别库索引,用于确定这个图像文件对应哪个识别库。
HWND ,整数型,要截图的窗口句柄。
lpRect :整数型,要截图的区域,提供0代表截取窗口全部区域,否则请提供一个RECT结构类型的地址,该结构说明

了要截图的区域。
Vcode :文本型,返回的验证码字符串,使用该参数前需要将一个足够长的空白字符串赋值给它。
DebugMode :整数型,调试路径。正常调用请提供0,如果要把截图数据保存到磁盘文件,这里请提供一个字符串变

量的地址,这个字符串就是保存的路径。

Private Declare Function GetVcodeFromIECache Lib "AntiVC.dll" (ByVal CdsFileIndex As Long,ByVal ImgURL 

As String,ByVal Vcode As String) As Boolean
函数功能说明:使用CdsFileIndex对应的识别库,从IE缓存中搜索ImgURL所指向的图像文件,成功返回True,否则返

回False。该函数不会从网络上下载图像文件,而是在IE缓存中搜索,如果没有事先浏览过ImgURL所在的网页,这个

函数执行不会成功。使用时,请先用代码或浏览器浏览验证码所在网页,确保IE缓存保存了验证码图像文件。
函数参数说明:
CdsFileIndex :整数型,识别库索引,用于确定这个图像文件对应哪个识别库。
ImgURL :图像文件所在网址。这里请直接输入验证码图像的URL地址,函数将用这个地址确定相应的图像文件路径。
Vcode :文本型,返回的验证码字符串,使用该参数前需要将一个足够长的空白字符串赋值给它。

Private Declare Function GetVcodeFromHBitmap Lib "AntiVC.dll" (ByVal CdsFileIndex As Long,ByVal HBitmap 

As Long,ByVal Vcode As String) As Boolean
函数功能说明:使用CdsFileIndex对应的识别库,识别一个HBitmap所指向的位图数据,成功返回True,否则返回

False。这里HBitmap是位图句柄,请直接传递位图句柄给它。
函数参数说明:
CdsFileIndex :整数型,识别库索引,用于确定这个图像文件对应哪个识别库。
HBitmap :验证码图像的位图句柄。必须是位图句柄!
Vcode :文本型,返回的验证码字符串,使用该参数前需要将一个足够长的空白字符串赋值给它。

-----------以上五个函数请根据情况选择其一即可------------------

PS:由于可能导致某些不良杀毒软件误报,GetVcodeFromURL这个函数在这个版本中已经删除!

-----------以下一个函数用于释放识别库-----------
Private Declare Function FreeAllCdsFile Lib "AntiVC.dll" () 
函数功能说明:释放全部载入的识别库,回收占用的内存。
参数:无
返回值:无

-----------以下一个函数用于设定超时时间------------------
Private Declare Function SetTimeOut Lib "AntiVC.dll" (ByVal CdsFileIndex As Long,ByVal TimeOut As Long) 

As Boolean
函数功能说明:设定识别超时时间,超时直接返回,不再继续识别。设定成功返回真,否则返回假。
函数参数说明:
CdsFileIndex :整数型,识别库索引,用于确定这个图像文件对应哪个识别库。
TimeOut :整数型,超时时间,单位为毫秒。

-----------以下一个函数用于设定识别库选项------------------
Private Declare Function SetCdsOption Lib "AntiVC.dll" (ByVal CdsFileIndex As Long,ByVal OptionIndex As 

Long,ByVal OptionValue As Long) As Boolean
函数功能说明:设定识别库选项。设定成功返回真,否则返回假。
函数参数说明:
CdsFileIndex :整数型,识别库索引,用于确定这个图像文件对应哪个识别库。
OptionIndex :整数型,选项索引,取值范围1~9。
OptionValue :整数型,选项数值。

参数详解:
    OptionIndex    OptionValue
1.    最小相似度    取值范围:0100
2.    识别模式    取值范围:03
3.    分割方式    取值范围:02
4.    识别加速    取值范围:0,非零,分别代表逻辑值假和真
5.    字符个数    取值范围:大于0
6.    分割份数    取值范围:大于0
7.    去除杂点    取值范围:0,非零,分别代表逻辑值假和真
8.    去除白边    取值范围:0,非零,分别代表逻辑值假和真
9.    去除毛刺    取值范围:0,非零,分别代表逻辑值假和真

-----------以下一个函数用于计算数学表达式------------------
Private Declare Function Calculator Lib "AntiVC.dll" (ByVal Expression As String,ByVal CalcResult As String) 

As Boolean
函数功能说明:计算数学表达式。失败返回空文本,成功返回计算结果文本。功能非常简单,只是用来计算那些需要

填写计算结果的验证码。计算完成返回真,否则返回假。
函数参数说明:
Expression :文本型,数学表达式,只能计算简单的+-×/,不能有括号,且算术符号只能有一个。
CalcResult :文本型,计算结果,使用需要将一个足够长的空白字符串赋值给它。

-----------以下一个函数用于设置文本参数为unicode格式------------------
Private Declare Function UseUnicodeString Lib "AntiVC.dll" (ByVal UnicodeString As Boolean) 
函数功能说明:设置传入dll的各个文本类型参数使用unicode格式,一次设置长期有效。无返回值。
函数参数说明:
UnicodeString :逻辑型,为真文本类型参数使用unicode格式,否则使用ansi格式。

 

posted @ 2015-10-22 16:41  海蓝7  阅读(3160)  评论(0编辑  收藏  举报