zoukankan      html  css  js  c++  java
  • 次世代验证码识别系统

    需要 

    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 + '	emp.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 + '	emp.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格式。
  • 相关阅读:
    VS2015新建项目无法选择framework 4.6.2
    AngularGauge 属性解析(转载)
    JAVA基础总结2
    JAVA基础总结
    今天做项目用到框架,关于angual,然后自己整理了一番,自己上网也看了看。
    晚上闲来无事,整理一下字符串和数组常用的方法,分享给大家。
    今天写项目时,突然发现canvas的一些公式不记得了,所以整理了一番,分享给大家。
    在公司没事,随手写写
    今天做项目时,用到了好多关于js的知识点,有的忘记了,然后晚上回来自己整理一番,明天继续整理。哈哈,分享给大家。
    DOM相关知识点以及原型
  • 原文地址:https://www.cnblogs.com/rogge7/p/4901499.html
Copyright © 2011-2022 走看看