需要
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. 最小相似度 取值范圍:0~100 2. 識別模式 取值范圍:0~3 3. 分割方式 取值范圍:0~2 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格式。