⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 纯数字验证码的识别.txt

📁 大量Delphi开发资料
💻 TXT
字号:
那段代码看过,那下面这段呢。。
//RecogniseUnit.pas  
unit  RecogniseUnit;  
 
interface  
 
uses  
   Windows,  Messages,  SysUtils,  Variants,  Classes,  Graphics,  Controls,  Forms,  
   Dialogs,  ExtCtrls,  ImgList,  StdCtrls,  OleCtrls,  SHDocVw;  
 
type  
   TFormRecognise  =  class(TForm)  
       ImageList1:  TImageList;  
       ButtonRefresh:  TButton;  
       WebBrowser1:  TWebBrowser;  
       EditNumber:  TEdit;  
       procedure  ButtonRefreshClick(Sender:  TObject);  
       procedure  FormCreate(Sender:  TObject);  
       procedure  WebBrowser1DownloadComplete(Sender:  TObject);  
   private  
       {  Private  declarations  }  
   public  
       {  Public  declarations  }  
   end;  
 
var  
   FormRecognise:  TFormRecognise;  
 
implementation  
 
{$R  *.dfm}  
 
uses  Math;  //use  Math.Min()  
 
function  SameCanvas(mCanvasA,  mCanvasB:  TCanvas):  Boolean;  {  比较两个画布是否相同  }  
var  
   I,  J:  Integer;  
begin  
   Result  :=  False;  
   if  not  Assigned(mCanvasA)  then  Exit;  
   if  not  Assigned(mCanvasB)  then  Exit;  
   for  I  :=  Min(mCanvasA.ClipRect.Left,  mCanvasB.ClipRect.Left)  to  
       Min(mCanvasA.ClipRect.Right,  mCanvasB.ClipRect.Right)  do  
       for  J  :=  Min(mCanvasA.ClipRect.Top,  mCanvasB.ClipRect.Top)  to  
           Min(mCanvasA.ClipRect.Bottom,  mCanvasB.ClipRect.Bottom)  do  
           if  mCanvasA.Pixels[I,  J]  <>  mCanvasB.Pixels[I,  J]  then  Exit;  
   Result  :=  True;  
end;  {  SameCanvas  }  
 
procedure  TFormRecognise.ButtonRefreshClick(Sender:  TObject);  
begin  
   TButton(Sender).Enabled  :=  False;  
   WebBrowser1.Refresh;  
end;  
 
procedure  TFormRecognise.FormCreate(Sender:  TObject);  
begin  
   WebBrowser1.Navigate('http://verify.tencent.com/getimage?0.8539209923422657');  
end;  
 
procedure  TFormRecognise.WebBrowser1DownloadComplete(Sender:  TObject);  
   procedure  fNumBitmap(mHandle:  THandle;  mIndex:  Integer;  mBitmap:  TBitmap);  
   var  
       vDC:  HDC;  
   begin  
       vDC  :=  GetDC(mHandle);  
       try  
           mBitmap.Assign(nil);  
           mBitmap.Width  :=  5;  
           mBitmap.Height  :=  8;  
           BitBlt(mBitmap.Canvas.Handle,  0,  0,  mBitmap.Width,  mBitmap.Height,  vDC,  
               17  +  6  *  mIndex,  18,  SRCCOPY);  
           mBitmap.PixelFormat  :=  pf8bit;  
           mBitmap.PixelFormat  :=  pf1bit;  
       finally  
           DeleteDC(vDC);  
       end;  
   end;  
 
   function  fGetNum(mHandle:  THandle;  mIndex:  Integer):  Integer;  
   var  
       I:  Integer;  
       vBitmapA:  TBitmap;  
       vBitmapB:  TBitmap;  
   begin  
       Result  :=  -1;  
       vBitmapA  :=  TBitmap.Create;  
       vBitmapB  :=  TBitmap.Create;  
       fNumBitmap(mHandle,  mIndex,  vBitmapA);  
       vBitmapB.Width  :=  vBitmapA.Width;  
       vBitmapB.Height  :=  vBitmapA.Height;  
       for  I  :=  9  downto  0  do  begin  //8会覆盖3的基础码,所以反循环  
           vBitmapB.Canvas.Draw(0,  0,  vBitmapA);  
           ImageList1.Draw(vBitmapB.Canvas,  0,  0,  I);  
           vBitmapB.PixelFormat  :=  pf8bit;  
           vBitmapB.PixelFormat  :=  pf1bit;  
           if  SameCanvas(vBitmapA.Canvas,  vBitmapB.Canvas)  then  begin  
               Result  :=  I;  
               Exit;  
           end;  
       end;  
       vBitmapA.Free;  
       vBitmapB.Free;  
   end;  
var  
   S:  string;  
   I:  Integer;  
begin  
   Application.ProcessMessages;  
   S  :=  '';  
   for  I  :=  0  to  3  do  S  :=  S  +  IntToStr(fGetNum(WebBrowser1.Handle,  I));  
   EditNumber.Text  :=  S;  
   ButtonRefresh.Enabled  :=  True;  
end;  
 
end.    


===================================================================================
function SameCanvas(mCanvasA, mCanvasB: TCanvas): Boolean; { 比较两个画布是否相同 }
var
  I, J: Integer;
begin
  Result := False;
  if not Assigned(mCanvasA) then Exit;
  if not Assigned(mCanvasB) then Exit;
  for I := Min(mCanvasA.ClipRect.Left, mCanvasB.ClipRect.Left) to
    Min(mCanvasA.ClipRect.Right, mCanvasB.ClipRect.Right) do
    for J := Min(mCanvasA.ClipRect.Top, mCanvasB.ClipRect.Top) to
      Min(mCanvasA.ClipRect.Bottom, mCanvasB.ClipRect.Bottom) do
      if mCanvasA.Pixels[I, J] <> mCanvasB.Pixels[I, J] then Exit;
  Result := True;
end;   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -