次世代驗證碼識別系統


需要 

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格式。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM