识别 中国农业银行,的小键盘,和验证码

本文介绍了一款自动填表小工具的开发过程和技术细节,包括界面设计、网页元素定位及数据填充方法。该工具能够自动完成网页登录和信息填写,提高了工作效率。
  1. unit MainForm;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs, StdCtrls, OleCtrls, SHDocVw, adodb, db,
  6.   ActiveX, ComObj, StdVcl,
  7.   shellapi, ShlObj, Registry, mshtml, ExtCtrls, ComCtrls, ToolWin, ImgList,
  8.   clipbrd, Menus, Buttons;
  9. const numW = 30;
  10.   numH = 50;
  11.   zs = 'zs.txt';
  12.   effx1 = 4;
  13.   effy1 = 8;
  14.   effx2 = 24;
  15.   effy2 = 37;
  16.   keynumW = 24;
  17.   keynumH = 24;
  18. type
  19.   TMainFrm = class(TForm)
  20.     Timer1: TTimer;
  21.     ImageList4: TImageList;
  22.     CoolBar2: TCoolBar;
  23.     ToolBar: TToolBar;
  24.     btnNew: TToolButton;
  25.     ToolbtnEdit: TToolButton;
  26.     btnAnalysis: TToolButton;
  27.     bitExit: TToolButton;
  28.     MainMenu1: TMainMenu;
  29.     N1: TMenuItem;
  30.     N2: TMenuItem;
  31.     N3: TMenuItem;
  32.     N4: TMenuItem;
  33.     N5: TMenuItem;
  34.     N6: TMenuItem;
  35.     N7: TMenuItem;
  36.     Panel1: TPanel;
  37.     Panel3: TPanel;
  38.     Panel4: TPanel;
  39.     Panel5: TPanel;
  40.     Label1: TLabel;
  41.     EditUrl: TEdit;
  42.     Button1: TButton;
  43.     Button2: TButton;
  44.     Button3: TButton;
  45.     StatusBar1: TStatusBar;
  46.     IE: TWebBrowser;
  47.     SpeedButton1: TSpeedButton;
  48.     Label3: TLabel;
  49.     ImageListTreeView: TImageList;
  50.     ToolButton2: TToolButton;
  51.     img1: TImage;
  52.     a1: TImage;
  53.     a2: TImage;
  54.     a3: TImage;
  55.     a4: TImage;
  56.     Edit3: TEdit;
  57.     Label5: TLabel;
  58.     Panel7: TPanel;
  59.     Panel8: TPanel;
  60.     Label4: TLabel;
  61.     Edit2: TEdit;
  62.     Label2: TLabel;
  63.     takepicturesYZM: TButton;
  64.     Button6: TButton;
  65.     btnApplay: TButton;
  66.     b1: TImage;
  67.     b2: TImage;
  68.     b3: TImage;
  69.     b4: TImage;
  70.     btnidentifyYZM: TBitBtn;
  71.     Label6: TLabel;
  72.     Label7: TLabel;
  73.     A5: TImage;
  74.     B5: TImage;
  75.     Button9: TButton;
  76.     Label10: TLabel;
  77.     Label11: TLabel;
  78.     Label12: TLabel;
  79.     Label13: TLabel;
  80.     Edit4: TEdit;
  81.     Button10: TButton;
  82.     Button11: TButton;
  83.     Image8: TImage;
  84.     Edit5: TEdit;
  85.     RB1: TRadioButton;
  86.     EditStudentX1: TEdit;
  87.     Label14: TLabel;
  88.     Label15: TLabel;
  89.     EditStudentY1: TEdit;
  90.     RB2: TRadioButton;
  91.     Label16: TLabel;
  92.     EditStudentX2: TEdit;
  93.     Label17: TLabel;
  94.     EditStudentY2: TEdit;
  95.     RB3: TRadioButton;
  96.     Label18: TLabel;
  97.     EditStudentX3: TEdit;
  98.     Label19: TLabel;
  99.     EditStudentY3: TEdit;
  100.     Edit6: TEdit;
  101.     Label8: TLabel;
  102.     Label20: TLabel;
  103.     Label21: TLabel;
  104.     Label22: TLabel;
  105.     Panel2: TPanel;
  106.     Label9: TLabel;
  107.     KeyBordImage: TImage;
  108.     takepicturesPWD: TBitBtn;
  109.     key1: TImage;
  110.     key2: TImage;
  111.     key3: TImage;
  112.     key4: TImage;
  113.     key5: TImage;
  114.     key6: TImage;
  115.     key7: TImage;
  116.     key8: TImage;
  117.     key9: TImage;
  118.     key0: TImage;
  119.     BitBtn3: TBitBtn;
  120.     RKey: TEdit;
  121.     Label23: TLabel;
  122.     btnidentifyPWD: TButton;
  123.     Image1: TImage;
  124.     Label24: TLabel;
  125.     PWD: TEdit;
  126.     procedure Button1Click(Sender: TObject);
  127.     procedure Button2Click(Sender: TObject);
  128.     procedure Button3Click(Sender: TObject);
  129.     procedure Timer1Timer(Sender: TObject);
  130.     procedure N4Click(Sender: TObject);
  131.     procedure FormShow(Sender: TObject);
  132.     procedure bitExitClick(Sender: TObject);
  133.     procedure FormCreate(Sender: TObject);
  134.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  135.     procedure takepicturesYZMClick(Sender: TObject);
  136.     procedure Button6Click(Sender: TObject);
  137.     procedure IENavigateComplete2(Sender: TObject; const pDisp: IDispatch;
  138.       var URL: OleVariant);
  139.     procedure IEStatusTextChange(Sender: TObject; const Text: WideString);
  140.     procedure IETitleChange(Sender: TObject; const Text: WideString);
  141.     procedure IEDownloadComplete(Sender: TObject);
  142.     procedure btnApplayClick(Sender: TObject);
  143.     procedure Button9Click(Sender: TObject);
  144.     procedure a1MouseMove(Sender: TObject; Shift: TShiftState; X,
  145.       Y: Integer);
  146.     procedure a1MouseDown(Sender: TObject; Button: TMouseButton;
  147.       Shift: TShiftState; X, Y: Integer);
  148.     procedure Button10Click(Sender: TObject);
  149.     procedure Button11Click(Sender: TObject);
  150.     procedure btnidentifyYZMClick(Sender: TObject);
  151.     procedure takepicturesPWDClick(Sender: TObject);
  152.     procedure BitBtn3Click(Sender: TObject);
  153.     procedure btnidentifyPWDClick(Sender: TObject);
  154.     procedure btnNewClick(Sender: TObject);
  155.     procedure ToolbtnEditClick(Sender: TObject);
  156.   private
  157.     { Private declarations }
  158.   public
  159.     { Public declarations }
  160.     isDestroy: boolean;
  161.     RootNode: ttreenode;
  162.     IEDownloadCompleteNotify: BOOLEAN;
  163.     JetFly: boolean;
  164.     procedure save;
  165.     function isSamePicture(pics, picd: timage): boolean;
  166.     procedure zhaoColor(tmp: timage; pixels1: longint; pixels2: longint; pixels3: longint);
  167.     procedure DrawBox(tmp: timage; x1, y1, x2, y2: integer);
  168.     function GetSimilar(TMP1, TMP2: TIMAGE): INTEGER;
  169.     function GetSimilarKey(TMP1, TMP2: TIMAGE): INTEGER;
  170.     function identify(tmp: timage; index: string): string;
  171.     function identifyKey(tmp: timage): string;
  172.     procedure RefuseMuck(tmp: timage);
  173.     procedure ClickKey(p1: string);
  174.     function isRightLoginIEForm: boolean;
  175.     function isBlankForm: boolean;
  176.   end;
  177. var
  178.   MainFrm: TMainFrm;
  179. implementation
  180. uses Unit2, DM_Unit, PPUBPAS, sndkey32;
  181. {$R *.dfm}
  182. procedure TMainFrm.Button1Click(Sender: TObject);
  183. begin
  184.   IE.Navigate(EditUrl.Text);
  185. end;
  186. function TMainFrm.isRightLoginIEForm: boolean;
  187. var
  188.   HtmlDoc: IHTMLDocument2;
  189.   InputText1: IHTMLInputTextElement; // Edit框
  190.   TypeElement: variant;
  191.   I: Integer;
  192. begin
  193.   result := false;
  194.   HtmlDoc := IE.Document as IHTMLDocument2;
  195.   for i := 0 to HtmlDoc.all.length - 1 do
  196.   begin
  197.     TypeElement := Htmldoc.all.item(i, varempty);
  198.     if Uppercase(TypeElement.tagName) = 'INPUT' then
  199.     begin
  200.       if Uppercase(TypeElement.type) = 'TEXT' then // 填 Edit 框
  201.       begin
  202.         InputText1 := HtmlDoc.all.item(i, varempty) as IHTMLInputTextElement;
  203.         if InputText1.name = 'bankcardno' then
  204.         begin
  205.           result := true;
  206.           exit;
  207.         end;
  208.       end;
  209.     end;
  210.   end;
  211. end;
  212. function TMainFrm.isBlankForm: boolean;
  213. var
  214.   HtmlDoc: IHTMLDocument2;
  215.   htm: string;
  216. begin
  217.   result := false;
  218.   HTM := (IE.Document as Ihtmldocument2).body.outerHtml;
  219.   if pos('您正在查找的页当前不可用。 网站可能遇到支持问题,或者您需要 调整', htm) > 0 then
  220.     result := true;
  221. end;
  222. procedure TMainFrm.Button2Click(Sender: TObject);
  223. var
  224.   HtmlDoc: IHTMLDocument2;
  225.   InputText1, InputText2, InputText3, InputText4, InputText5: IHTMLInputTextElement; // Edit框
  226.   TypeElement: variant;
  227.   I: Integer;
  228. begin
  229. //  IE.Navigate(edit1.Text);
  230. //  exit;
  231.   HtmlDoc := IE.Document as IHTMLDocument2;
  232.   for i := 0 to HtmlDoc.all.length - 1 do
  233.   begin
  234.     TypeElement := Htmldoc.all.item(i, varempty);
  235.     if Uppercase(TypeElement.tagName) = 'INPUT' then
  236.     begin
  237.     // SHOWMESSAGE(TypeElement.type);
  238.       if Uppercase(TypeElement.type) = 'TEXT' then // 填 Edit 框
  239.       begin
  240.         InputText1 := HtmlDoc.all.item(i, varempty) as IHTMLInputTextElement;
  241.         if InputText1.name = 'bankcardno' then InputText1.value := '9559982898189053411';
  242.         InputText4 := HtmlDoc.all.item(i, varempty) as IHTMLInputTextElement;
  243.         if InputText4.name = 'imagecode' then InputText4.value := '123456';
  244.       end;
  245.       if Uppercase(TypeElement.type) = 'PASSWORD' then // 填密码框
  246.       begin
  247.         InputText2 := HtmlDoc.all.item(i, varempty) as IHTMLInputTextElement;
  248.         if InputText2.name = 'USER_PASSWD' then InputText2.value := '313889';
  249.         InputText3 := HtmlDoc.all.item(i, varempty) as IHTMLInputTextElement;
  250.         if InputText3.name = 'password2' then InputText3.value := '12345678';
  251.       end;
  252.     end;
  253.   end;
  254. end;
  255. procedure TMainFrm.Button3Click(Sender: TObject);
  256. var
  257.   HtmlDoc: IHTMLDocument2;
  258.   myitem: Olevariant;
  259.   i: integer;
  260. begin
  261.   myitem := IE.Document;
  262.   for i := 0 to myitem.all.length - 1 do
  263.   begin
  264.     if myitem.all.item(i).tagName = 'INPUT' then
  265.       if Uppercase(myitem.all.item(i).type) = 'SUBMIT' then
  266.         if Uppercase(myitem.all.item(i).name) = 'BLOGIN' then
  267.           myitem.all.item(i).click;
  268.   end;
  269. end;
  270. procedure TMainFrm.Timer1Timer(Sender: TObject);
  271. var
  272.   ParentHandle, ChildHanlde: THandle;
  273.   c: array[0..255of char;
  274.   DrawPos: Tpoint;
  275. begin
  276.   GetCursorPos(DrawPos);
  277.   StatusBar1.Panels.Items[3].Text := INTTOSTR(DrawPos.X);
  278.   StatusBar1.Panels.Items[5].Text := INTTOSTR(DrawPos.Y);
  279.   ParentHandle := FindWindow(nil'安全警报');
  280.   if ParentHandle = 0 then ParentHandle := FindWindow(nil'安全信息');
  281.   if ParentHandle <> 0 then
  282.   begin
  283.     ChildHanlde := FindWindowEx(ParentHandle, 0'Button'nil);
  284.     while ChildHanlde <> 0 do
  285.     begin
  286.       GetWindowText(ChildHanlde, @c, 255);
  287.       if c = '是(&Y)' then
  288.       begin
  289.   //  msgok('found');
  290.         SendMessage(ChildHanlde, bm_click, 00);
  291.         exit;
  292.       end;
  293.       ChildHanlde := FindWindowEx(ParentHandle, ChildHanlde, PChar('TButton'), nil);
  294.     end;
  295.   end;
  296. end;
  297. procedure TMainFrm.N4Click(Sender: TObject);
  298. begin
  299.   close;
  300. end;
  301. procedure TMainFrm.bitExitClick(Sender: TObject);
  302. begin
  303.   JetFly := false;
  304.   CLOSE;
  305. end;
  306. procedure TMainFrm.FormCreate(Sender: TObject);
  307. var rmf: TRMFolderInfo;
  308. begin
  309.   label9.Caption := 'Jet已经启动...';
  310.   DM := TDM.Create(nil);
  311.   if dm.ConnectDataBaseOK then
  312.     StatusBar1.Panels.Items[1].Text := '连接正常'
  313.   else
  314.     StatusBar1.Panels.Items[1].Text := '连接失败';
  315.   rmf := TRMFolderInfo.Create;
  316.   rmf.Name := '策略树';
  317.   rmf.FolderId := c_null_guid;
  318.   isDestroy := False;
  319. //  ie.Navigate(CurPath + 'index.htm');
  320.   IE.Navigate('https://easyabc.95599.cn/b2c/b2c/ecard/ElecCardLogin.jsp');
  321. end;
  322. procedure TMainFrm.FormShow(Sender: TObject);
  323. var h: hwnd;
  324. begin
  325.   SELF.Caption := '自动填表小工具 V1.0';
  326.   h := findwindow(nil'自动填表小工具 V1.0');
  327.     //PostMessage(hwnd,WM_SYSCOMMAND, SC_MINIMIZE,0); //最小化
  328.   PostMessage(h, WM_SYSCOMMAND, SC_MAXIMIZE, 0); //最大化
  329.     //PostMessage(hwnd,WM_SYSCOMMAND, SC_CLOSE,0);//关闭
  330.   Panel4.Align := alclient;
  331. end;
  332. procedure TMainFrm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  333. begin
  334.   JetFly := false;
  335.   if dm <> nil then
  336.   begin
  337.     freeandnil(dm);
  338.   end;
  339. end;
  340. procedure TMainFrm.save;
  341. var elem: IHTMLElement; //     使用需     uses  Mshtml,SHDocVw;
  342.   coll: IHTMLElementCollection; //    mshtm类
  343.   i: Integer;
  344.   url, Text: string;
  345.   d2, D: IHTMLDocument2;
  346.   d1: IHTMLDocument;
  347.   e: IHTMLElement;
  348.   e2: IHTMLElement2;
  349.   cp: IHTMLControlRange;
  350.   img: IHTMLImgElement;
  351.   ce: IHTMLControlElement;
  352.   bmp: TBitmap;
  353.   r0: TRect;
  354.   newbmp: TBitmap;
  355.   r1: TRect;
  356.   checkstr: string;
  357.   MyHandle: THandle;
  358.   bmpPtr: Pointer;
  359. begin
  360.   try
  361.     while IE.Busy do Application.ProcessMessages;
  362.     IE.Stop;
  363.     if IE.Document = nil then Exit;
  364.     D := IE.Document as IHTMLDocument2;
  365.     e := d.body as IHTMLElement;
  366.     e2 := e as IHTMLElement2;
  367.     cp := e2.createControlRange as IHTMLControlRange;
  368.     d2 := IE.Document as IHTMLDocument2;
  369.     coll := d.all;
  370.     coll := (coll.tags('img'as IHTMLElementCollection);
  371.     for i := 0 to coll.Length - 1 do
  372.     begin //   循环取出每个url
  373.       elem := (coll.item(i, 0as IHTMLElement);
  374.       url := Trim(string(elem.getAttribute(WideString('src'), 0)));
  375.          //Text := Trim(string(elem.outertext));
  376.       if pos('getCheckImg', url) > 0 then
  377.       begin
  378.         Break;
  379.       end;
  380.           //DebugInfo(text+#13#10+url) ;
  381.       Application.ProcessMessages;
  382.     end;
  383.     img := elem as IHTMLImgElement;
  384.     ce := img as IHTMLControlElement;
  385.     cp.add(ce);
  386.     try
  387.      // Clipboard.Open;
  388.       Clipboard.Clear;
  389.      // if   Clipboard.hasFormat(CF_BITMAP) then
  390.       begin
  391.         try
  392.           cp.execCommand('Copy'false0);
  393.           MyHandle := Clipboard.GetAsHandle(cf_Bitmap);
  394.           bmpPtr := GlobalLock(MyHandle);
  395.           img1.Picture.Bitmap.Assign(Clipboard);
  396.           img1.Picture.LoadFromClipboardFormat(cf_BitMap, MyHandle, 0);
  397.           Clipboard.Clear;
  398.           GlobalUnlock(MyHandle);
  399.         finally
  400.           Clipboard.Close;
  401.         end;
  402.       end;
  403.       bmp := (img1.Picture.Bitmap as TBitmap);
  404.     except
  405.       img1.Picture.LoadFromClipboardFormat(cf_BitMap, ClipBoard.GetAsHandle(cf_Bitmap), 0);
  406.       checkstr := '';
  407.     end;
  408.   finally
  409.   end;
  410. end;
  411. procedure TMainFrm.takepicturesYZMClick(Sender: TObject);
  412. begin
  413.   edit3.SetFocus;
  414.   img1.Picture.Bitmap := nil;
  415.   BitBlt(img1.Canvas.Handle, 00, numW * 5, numH, self.Canvas.Handle, 743388, SRCCOPY);
  416.   A1.Picture.Bitmap := nil;
  417.   A2.Picture.Bitmap := nil;
  418.   A3.Picture.Bitmap := nil;
  419.   A4.Picture.Bitmap := nil;
  420.   A5.Picture.Bitmap := nil;
  421.   BitBlt(a1.Canvas.Handle, 00, numW, numH, img1.Canvas.Handle, 0 * (numW - 1), 0, SRCCOPY);
  422.   BitBlt(a2.Canvas.Handle, 00, numW, numH, img1.Canvas.Handle, 1 * (numW - 1), 0, SRCCOPY);
  423.   BitBlt(a3.Canvas.Handle, 00, numW, numH, img1.Canvas.Handle, 2 * (numW - 1), 0, SRCCOPY);
  424.   BitBlt(a4.Canvas.Handle, 00, numW, numH, img1.Canvas.Handle, 3 * (numW - 1), 0, SRCCOPY);
  425.   BitBlt(a5.Canvas.Handle, 00, numW, numH, img1.Canvas.Handle, 4 * (numW - 1), 0, SRCCOPY);
  426.   edit3.Text := '';
  427. end;
  428. procedure TMainFrm.Button6Click(Sender: TObject);
  429. begin
  430.   SetCursorPos(767352);
  431.   Mouse_Event(MOUSEEVENTF_LEFTDOWN, 76735600);
  432.   Mouse_Event(MOUSEEVENTF_LEFTUP, 76735600);
  433. end;
  434. procedure TMainFrm.IENavigateComplete2(Sender: TObject;
  435.   const pDisp: IDispatch; var URL: OleVariant);
  436. begin
  437.   StatusBar1.Panels.Items[5].Text := url;
  438. end;
  439. procedure TMainFrm.IEStatusTextChange(Sender: TObject;
  440.   const Text: WideString);
  441. begin
  442.   StatusBar1.Panels.Items[7].Text := Text;
  443. end;
  444. procedure TMainFrm.IETitleChange(Sender: TObject; const Text: WideString);
  445. begin
  446.   StatusBar1.Panels.Items[7].Text := Text;
  447. end;
  448. procedure TMainFrm.IEDownloadComplete(Sender: TObject);
  449. begin
  450.   StatusBar1.Panels.Items[7].Text := 'DownloadComplete';
  451.   IEDownloadCompleteNotify := true;
  452. end;
  453. function TMainFrm.isSamePicture(pics, picd: timage): boolean;
  454. var i, j: integer;
  455. begin
  456.   result := false;
  457.   for i := 0 to pics.Width - 1 do
  458.   begin
  459.     for j := 1 to pics.Height do
  460.     begin
  461.       if pics.Canvas.Pixels[i, j] <> picd.Canvas.Pixels[i, j] then exit;
  462.     end;
  463.   end;
  464.   result := true;
  465. end;
  466. procedure TMainFrm.zhaoColor(tmp: timage; pixels1: longint; pixels2: longint; pixels3: longint);
  467. var i, j: integer;
  468. begin
  469.   for i := 0 to tmp.Width - 1 do
  470.     for j := 0 to tmp.Height - 1 do
  471.     begin
  472.       if (TMP.Canvas.Pixels[i, j] = pixels1) or (TMP.Canvas.Pixels[i, j] = pixels2) or
  473.         (TMP.Canvas.Pixels[i, j] = pixels3) then TMP.Canvas.Pixels[i, j] := RGB(25500); //红色
  474.     end;
  475. end;
  476. procedure TMainFrm.DrawBox(tmp: timage; x1, y1, x2, y2: integer);
  477. begin
  478.   tmp.Canvas.MoveTo(x1, y1);
  479.   tmp.Canvas.LineTo(x2, y1);
  480.   tmp.Canvas.LineTo(x2, y2);
  481.   tmp.Canvas.LineTo(x1, y2);
  482.   tmp.Canvas.LineTo(x1, y1);
  483. end;
  484. function TMainFrm.GetSimilar(TMP1, TMP2: TIMAGE): INTEGER;
  485. var I, J: INTEGER;
  486. begin
  487.   RESULT := 0;
  488.   for I := EFFX1 to EFFX2 do
  489.     for J := EFFY1 to EFFY2 do
  490.     begin
  491.       if TMP1.Canvas.Pixels[I, J] = TMP2.Canvas.Pixels[I, J] then INC(RESULT);
  492.     end;
  493. end;
  494. function TMainFrm.GetSimilarKey(TMP1, TMP2: TIMAGE): INTEGER;
  495. var I, J: INTEGER;
  496. begin
  497.   RESULT := 0;
  498.   for I := 0 to keynumW do
  499.     for J := 0 to keynumH do
  500.     begin
  501.       if TMP1.Canvas.Pixels[I, J] = TMP2.Canvas.Pixels[I, J] then INC(RESULT);
  502.     end;
  503. end;
  504. function tMainFrm.identify(tmp: timage; index: string): string;
  505. var i, J: integer;
  506.   right: INTEGER;
  507.   d_no: string;
  508.   pixels1, pixels2, pixels3: longint;
  509. begin
  510.   dm.Study.First;
  511.   tmp.Canvas.Pen.Style := psSolid;
  512.   tmp.Canvas.Pen.Color := clred;
  513.  // self.DrawBox(tmp,4,8,24,38);   //画框
  514.   RIGHT := -1;
  515.   Result := '?';
  516.   for i := 0 to 9 do
  517.   begin
  518.     d_no := index + '_' + inttostr(i);
  519.     b1.Picture.LoadFromFile(CurPath + 'template/' + d_no + '.bmp');
  520.     dm.Study.Locate('d_no', d_no, [lopartialkey]);
  521.     if dm.Study.FieldByName('d_no').Value = d_no then
  522.     begin
  523.       pixels1 := tmp.Canvas.Pixels[dm.Study.fieldbyname('EditStudentX1').AsInteger,
  524.         dm.Study.fieldbyname('EditStudenty1').AsInteger];
  525.       pixels2 := tmp.Canvas.Pixels[dm.Study.fieldbyname('EditStudentX2').AsInteger,
  526.         dm.Study.fieldbyname('EditStudenty2').AsInteger];
  527.       pixels3 := tmp.Canvas.Pixels[dm.Study.fieldbyname('EditStudentX3').AsInteger,
  528.         dm.Study.fieldbyname('EditStudenty3').AsInteger];
  529.     //  zhaoColor(tmp, pixels1, pixels2, pixels3);
  530.     end;
  531.     J := GetSimilar(TMP, B1);
  532.     if J > RIGHT then
  533.     begin
  534.       Right := j;
  535.       Result := INTTOSTR(I);
  536.     end;
  537.   end;
  538. end;
  539. procedure TMainFrm.btnidentifyYZMClick(Sender: TObject);
  540. begin
  541.   edit2.text := '';
  542.   edit2.text := edit2.text + identify(a1, '1');
  543.   edit2.text := edit2.text + identify(a2, '2');
  544.   edit2.text := edit2.text + identify(a3, '3');
  545.   edit2.text := edit2.text + identify(a4, '4');
  546.   edit2.text := edit2.text + identify(a5, '5');
  547. end;
  548. procedure TMainFrm.ClickKey(p1: string);
  549. var
  550.   i, ROW, COL: INTEGER;
  551.   ROW1, ROW2, ROW3, ROW4: string;
  552. begin
  553. //  AppActivate(pchar(self.Caption));
  554.   ROW1 := COPY(RKEY.Text, 13);
  555.   ROW2 := COPY(RKEY.Text, 43);
  556.   ROW3 := COPY(RKEY.Text, 73);
  557.   ROW4 := COPY(RKEY.Text, 101);
  558.   I := POS(P1, RKey.Text);
  559.   if I mod 3 = 1 then COL := 946;
  560.   if I mod 3 = 2 then COL := 946 + 30;
  561.   if I mod 3 = 0 then COL := 946 + 30 + 30;
  562.   if POS(P1, ROW1) > 0 then ROW := 328;
  563.   if POS(P1, ROW2) > 0 then ROW := 328 + 35;
  564.   if POS(P1, ROW3) > 0 then ROW := 328 + 35 + 35;
  565.   if POS(P1, ROW4) > 0 then ROW := 328 + 35 + 35 + 35;
  566.   SetCursorPos(COL + 15, ROW + 5 + 36);
  567.   //  msgok(p1);
  568.  // sleep(1000);
  569. end;
  570. procedure TMainFrm.btnApplayClick(Sender: TObject);
  571. var
  572.   i: integer;
  573.   P1: string;
  574. begin
  575.  // AppActivate(pchar(self.Caption));
  576.  // sendkeys(pchar(inttostr(i)), true);
  577.   SetCursorPos(767352);
  578.   Mouse_Event(MOUSEEVENTF_LEFTDOWN, 76735200);
  579.   Mouse_Event(MOUSEEVENTF_LEFTUP, 76735200);
  580.   sendkeys('955898989893411'false);
  581.   for i := 1 to length(pwd.Text) do
  582.   begin
  583.     P1 := COPY(PWD.Text, i, 1);
  584.     self.ClickKey(p1);
  585.   end;
  586.   SetCursorPos(767400 + 16);
  587.  
  588. //  sendkeys('~', false); //enter
  589.  // sendkeys('~', false); crtl+enter
  590. end;
  591. procedure TMainFrm.Button9Click(Sender: TObject);
  592. var p: string;
  593.   tmp: timage;
  594.   i, j: integer;
  595.   d_no: string;
  596. begin
  597.   label9.Caption := '';
  598.   if EDIT3.TEXT = '' then
  599.   begin
  600.     label9.Caption := '必须输入准确的号码!';
  601.     edit3.SetFocus;
  602.     EXIT;
  603.   end;
  604.   if EDIT6.TEXT = '' then
  605.   begin
  606.     label9.Caption := '必须输入准确的号码!';
  607.     edit6.SetFocus;
  608.     EXIT;
  609.   end;
  610.   if (EditStudentX1.Text = ''or (EditStudentX2.Text = ''or (EditStudentX3.Text = ''or
  611.     (EditStudenty1.Text = ''or (EditStudenty2.Text = ''or (EditStudenty3.Text = ''then
  612.   begin
  613.     if not ask('必须学习3点,继续吗?'then exit;
  614.     if EditStudentX1.Text = '' then EditStudentX1.Text := '0';
  615.     if EditStudentX2.Text = '' then EditStudentX2.Text := '0';
  616.     if EditStudentX3.Text = '' then EditStudentX3.Text := '0';
  617.     if EditStudenty1.Text = '' then EditStudenty1.Text := '0';
  618.     if EditStudenty2.Text = '' then EditStudenty2.Text := '0';
  619.     if EditStudenty3.Text = '' then EditStudenty3.Text := '0';
  620.   end;
  621.   if Edit6.Text = '1' then tmp := a1;
  622.   if Edit6.Text = '2' then tmp := a2;
  623.   if Edit6.Text = '3' then tmp := a3;
  624.   if Edit6.Text = '4' then tmp := a4;
  625.   if Edit6.Text = '5' then tmp := a5;
  626.   {
  627.   for I := 0 to tmp.Width - 1 do
  628.   begin
  629.     for j := 0 to tmp.Height - 1 do
  630.     begin
  631.       if tmp.Canvas.Pixels[I, j] <> rgb(255, 0, 0) then
  632.       begin
  633.         tmp.Canvas.Pixels[I, j] := rgb(255, 255, 255);
  634.       end;
  635.     end;
  636.   end;
  637.   }
  638.   p := CurPath + 'TEMPLATE/';
  639.   d_no := edit6.Text + '_' + EDIT3.TEXT;
  640.   dm.Study.Locate('d_no', d_no, [lopartialkey]);
  641.   if dm.Study.FieldByName('d_no').Value <> d_no then
  642.     dm.Study.Append
  643.   else
  644.     dm.Study.Edit;
  645.   dm.Study.FieldByName('d_no').Value := d_no;
  646.   dm.Study.FieldByName('EditStudentX1').Value := strtoint(EditStudentX1.Text);
  647.   dm.Study.FieldByName('EditStudentX2').Value := strtoint(EditStudentX2.Text);
  648.   dm.Study.FieldByName('EditStudentX3').Value := strtoint(EditStudentX3.Text);
  649.   dm.Study.FieldByName('EditStudenty1').Value := strtoint(EditStudenty1.Text);
  650.   dm.Study.FieldByName('EditStudenty2').Value := strtoint(EditStudenty2.Text);
  651.   dm.Study.FieldByName('EditStudenty3').Value := strtoint(EditStudenty3.Text);
  652.   dm.Study.Post;
  653.   tmp.Picture.SaveToFile(p + d_no + '.BMP');
  654.   label9.Caption := '保存成功...';
  655.   EditStudentX1.Text := '';
  656.   EditStudentX2.Text := '';
  657.   EditStudentX3.Text := '';
  658.   EditStudenty1.Text := '';
  659.   EditStudenty2.Text := '';
  660.   EditStudenty3.Text := '';
  661. end;
  662. procedure TMainFrm.a1MouseMove(Sender: TObject; Shift: TShiftState; X,
  663.   Y: Integer);
  664. var I, J: INTEGER;
  665.   tmp: timage;
  666. begin
  667.   LABEL12.Caption := INTTOSTR(X);
  668.   LABEL13.Caption := INTTOSTR(Y);
  669.   tmp := timage(sender);
  670.   EDIT5.TEXT := INTTOSTR(tmp.Canvas.Pixels[X, Y]);
  671.   for I := 0 to Image8.Width - 1 do
  672.     for J := 0 to Image8.Height - 1 do
  673.     begin
  674.       Image8.Canvas.Pixels[I, J] := tmp.Canvas.Pixels[X, Y];
  675.     end;
  676. end;
  677. procedure TMainFrm.a1MouseDown(Sender: TObject; Button: TMouseButton;
  678.   Shift: TShiftState; X, Y: Integer);
  679. var I, J: INTEGER;
  680.   tmp: timage;
  681. begin
  682.   tmp := timage(sender);
  683.   EDIT4.TEXT := INTTOSTR(tmp.Canvas.Pixels[X, Y]);
  684.   if RB1.Checked then
  685.   begin
  686.     EditStudentX1.Text := INTTOSTR(X);
  687.     EditStudentY1.Text := INTTOSTR(y);
  688.   end;
  689.   if RB2.Checked then
  690.   begin
  691.     EditStudentX2.Text := INTTOSTR(X);
  692.     EditStudentY2.Text := INTTOSTR(y);
  693.   end;
  694.   if RB3.Checked then
  695.   begin
  696.     EditStudentX3.Text := INTTOSTR(X);
  697.     EditStudentY3.Text := INTTOSTR(y);
  698.   end;
  699.   for I := 0 to tmp.Width - 1 do
  700.     for J := 0 to tmp.Height - 1 do
  701.     begin
  702.       if tmp.Canvas.Pixels[I, J] = tmp.Canvas.Pixels[X, Y] then tmp.Canvas.Pixels[I, J] := RGB(25500); // IMAGE7.Canvas.Pixels[3, 3];
  703.     end;
  704. end;
  705. procedure TMainFrm.RefuseMuck(tmp: timage);
  706. var i, j, k: integer;
  707.   al: tstrings;
  708. begin
  709.   al := tstringlist.Create;
  710.   al.LoadFromFile(CurPath + zs);
  711.   for I := 0 to tmp.Width - 1 do
  712.   begin
  713.     TMP.Canvas.Pixels[i, 8] := RGB(255255255); //白色 RGB(255,255,255)
  714.     TMP.Canvas.Pixels[i, 9] := RGB(255255255); //白色 RGB(255,255,255)
  715.     TMP.Canvas.Pixels[i, 10] := RGB(255255255); //白色 RGB(255,255,255)
  716.     for j := 0 to tmp.Height - 1 do
  717.     begin
  718.       if al.IndexOf(inttostr(tmp.Canvas.Pixels[I, j])) > -1 then
  719.       begin
  720.         tmp.Canvas.Pixels[I, j] := rgb(255255255); //白色
  721.       end;
  722.       if i <= effx1 then tmp.Canvas.Pixels[I, j] := rgb(255255255); //白色
  723.       if i >= effx2 then TMP.Canvas.Pixels[i, j] := RGB(255255255); //白色 RGB(255,255,255)
  724.       if j <= effy1 then TMP.Canvas.Pixels[i, j] := RGB(255255255); //白色 RGB(255,255,255)
  725.       if j >= effy2 then TMP.Canvas.Pixels[i, j] := RGB(255255255); //白色 RGB(255,255,255)
  726.     end;
  727.   end;
  728. end;
  729. procedure TMainFrm.Button10Click(Sender: TObject);
  730. begin
  731.   self.RefuseMuck(a1);
  732.   self.RefuseMuck(a2);
  733.   self.RefuseMuck(a3);
  734.   self.RefuseMuck(a4);
  735.   self.RefuseMuck(a5);
  736.   edit3.SetFocus;
  737. end;
  738. procedure TMainFrm.Button11Click(Sender: TObject);
  739. var i, j, k: integer;
  740.   al: tstrings;
  741. begin
  742.   al := tstringlist.Create;
  743.   al.LoadFromFile(CurPath + zs);
  744.   for I := 0 to A1.Width - 1 do
  745.   begin
  746.     if al.IndexOf(inttostr(A1.Canvas.Pixels[I, 0])) = -1 then
  747.       al.Add(inttostr(A1.Canvas.Pixels[I, 0]));
  748.   end;
  749.   for I := 0 to A1.Width - 1 do
  750.   begin
  751.     if al.IndexOf(inttostr(A1.Canvas.Pixels[I, 1])) = -1 then
  752.       al.Add(inttostr(A1.Canvas.Pixels[I, 1]));
  753.   end;
  754.   for I := 0 to A1.Width - 1 do
  755.   begin
  756.     if al.IndexOf(inttostr(A1.Canvas.Pixels[I, 2])) = -1 then
  757.       al.Add(inttostr(A1.Canvas.Pixels[I, 2]));
  758.   end;
  759.   for I := 0 to A1.Width - 1 do
  760.   begin
  761.     if al.IndexOf(inttostr(A1.Canvas.Pixels[I, 3])) = -1 then
  762.       al.Add(inttostr(A1.Canvas.Pixels[I, 3]));
  763.   end;
  764.   for I := 0 to A1.Width - 1 do
  765.   begin
  766.     if al.IndexOf(inttostr(A1.Canvas.Pixels[I, 4])) = -1 then
  767.       al.Add(inttostr(A1.Canvas.Pixels[I, 4]));
  768.   end;
  769.   for I := 0 to A1.Width - 1 do
  770.   begin
  771.     if al.IndexOf(inttostr(A1.Canvas.Pixels[I, 5])) = -1 then
  772.       al.Add(inttostr(A1.Canvas.Pixels[I, 5]));
  773.   end;
  774.   for I := 0 to A1.Width - 1 do
  775.   begin
  776.     if al.IndexOf(inttostr(A1.Canvas.Pixels[I, 6])) = -1 then
  777.       al.Add(inttostr(A1.Canvas.Pixels[I, 6]));
  778.   end;
  779.   for I := 0 to A1.Width - 1 do
  780.   begin
  781.     if al.IndexOf(inttostr(A1.Canvas.Pixels[I, 7])) = -1 then
  782.       al.Add(inttostr(A1.Canvas.Pixels[I, 7]));
  783.   end;
  784.   for I := 0 to A1.Width - 1 do
  785.   begin
  786.     if al.IndexOf(inttostr(A1.Canvas.Pixels[I, 8])) = -1 then
  787.       al.Add(inttostr(A1.Canvas.Pixels[I, 8]));
  788.   end;
  789.   for I := 0 to A1.Width - 1 do
  790.   begin
  791.     if al.IndexOf(inttostr(A1.Canvas.Pixels[I, 9])) = -1 then
  792.       al.Add(inttostr(A1.Canvas.Pixels[I, 9]));
  793.   end;
  794.   al.SaveToFile(CurPath + zs);
  795.   al.Free;
  796. end;
  797. procedure TMainFrm.takepicturesPWDClick(Sender: TObject);
  798. begin
  799.   KeyBordImage.Picture.Bitmap := nil;
  800.   BitBlt(KeyBordImage.Canvas.Handle, 0094119, self.Canvas.Handle, 946328, SRCCOPY);
  801.   key0.Picture.Bitmap := nil;
  802.   key1.Picture.Bitmap := nil;
  803.   key2.Picture.Bitmap := nil;
  804.   key3.Picture.Bitmap := nil;
  805.   key4.Picture.Bitmap := nil;
  806.   key5.Picture.Bitmap := nil;
  807.   key6.Picture.Bitmap := nil;
  808.   key7.Picture.Bitmap := nil;
  809.   key8.Picture.Bitmap := nil;
  810.   key9.Picture.Bitmap := nil;
  811.   BitBlt(key1.Canvas.Handle, 00, KeynumW, KeynumH, KeyBordImage.Canvas.Handle, 00, SRCCOPY);
  812.   BitBlt(key2.Canvas.Handle, 00, KeynumW, KeynumH, KeyBordImage.Canvas.Handle, 350, SRCCOPY);
  813.   BitBlt(key3.Canvas.Handle, 00, KeynumW, KeynumH, KeyBordImage.Canvas.Handle, 700, SRCCOPY);
  814.   BitBlt(key4.Canvas.Handle, 00, KeynumW, KeynumH, KeyBordImage.Canvas.Handle, 032, SRCCOPY);
  815.   BitBlt(key5.Canvas.Handle, 00, KeynumW, KeynumH, KeyBordImage.Canvas.Handle, 3532, SRCCOPY);
  816.   BitBlt(key6.Canvas.Handle, 00, KeynumW, KeynumH, KeyBordImage.Canvas.Handle, 7032, SRCCOPY);
  817.   BitBlt(key7.Canvas.Handle, 00, KeynumW, KeynumH, KeyBordImage.Canvas.Handle, 062, SRCCOPY);
  818.   BitBlt(key8.Canvas.Handle, 00, KeynumW, KeynumH, KeyBordImage.Canvas.Handle, 3562, SRCCOPY);
  819.   BitBlt(key9.Canvas.Handle, 00, KeynumW, KeynumH, KeyBordImage.Canvas.Handle, 7062, SRCCOPY);
  820.   BitBlt(key0.Canvas.Handle, 00, KeynumW, KeynumH, KeyBordImage.Canvas.Handle, 096, SRCCOPY);
  821.   RKey.SetFocus;
  822. end;
  823. procedure TMainFrm.BitBtn3Click(Sender: TObject);
  824. var p: string;
  825.   tmp: timage;
  826.   i, j: integer;
  827.   d_no: string;
  828. begin
  829.   label9.Caption := '';
  830.   if LENGTH(RKey.TEXT) <> 10 then
  831.   begin
  832.     label9.Caption := '必须输入准确的号码!';
  833.     RKey.SetFocus;
  834.     EXIT;
  835.   end;
  836.   p := CurPath + 'TEMPLATE/';
  837.   KEY1.Picture.SaveToFile(P + 'K' + COPY(RKey.Text, 11) + '.BMP');
  838.   KEY2.Picture.SaveToFile(P + 'K' + COPY(RKey.Text, 21) + '.BMP');
  839.   KEY3.Picture.SaveToFile(P + 'K' + COPY(RKey.Text, 31) + '.BMP');
  840.   KEY4.Picture.SaveToFile(P + 'K' + COPY(RKey.Text, 41) + '.BMP');
  841.   KEY5.Picture.SaveToFile(P + 'K' + COPY(RKey.Text, 51) + '.BMP');
  842.   KEY6.Picture.SaveToFile(P + 'K' + COPY(RKey.Text, 61) + '.BMP');
  843.   KEY7.Picture.SaveToFile(P + 'K' + COPY(RKey.Text, 71) + '.BMP');
  844.   KEY8.Picture.SaveToFile(P + 'K' + COPY(RKey.Text, 81) + '.BMP');
  845.   KEY9.Picture.SaveToFile(P + 'K' + COPY(RKey.Text, 91) + '.BMP');
  846.   KEY0.Picture.SaveToFile(P + 'K' + COPY(RKey.Text, 101) + '.BMP');
  847.   label9.Caption := '保存成功...';
  848. end;
  849. function tMainFrm.identifyKey(tmp: timage): string;
  850. var i, J: integer;
  851.   RIGHT: integer;
  852. begin
  853.   Result := '?';
  854.   RIGHT := -1;
  855.   for i := 0 to 9 do
  856.   begin
  857.     Image1.Picture.LoadFromFile(CurPath + 'template/k' + inttostr(i) + '.bmp');
  858.     J := GetSimilarKey(TMP, Image1);
  859.     if J > RIGHT then
  860.     begin
  861.       Right := j;
  862.       Result := INTTOSTR(I);
  863.     end;
  864.   end;
  865. end;
  866. procedure TMainFrm.btnidentifyPWDClick(Sender: TObject);
  867. begin
  868.   RKEY.text := '';
  869.   RKEY.text := RKEY.text + identifyKey(KEY1);
  870.   RKEY.text := RKEY.text + identifyKey(KEY2);
  871.   RKEY.text := RKEY.text + identifyKey(KEY3);
  872.   RKEY.text := RKEY.text + identifyKey(KEY4);
  873.   RKEY.text := RKEY.text + identifyKey(KEY5);
  874.   RKEY.text := RKEY.text + identifyKey(KEY6);
  875.   RKEY.text := RKEY.text + identifyKey(KEY7);
  876.   RKEY.text := RKEY.text + identifyKey(KEY8);
  877.   RKEY.text := RKEY.text + identifyKey(KEY9);
  878.   RKEY.text := RKEY.text + identifyKey(KEY0);
  879. end;
  880. procedure TMainFrm.btnNewClick(Sender: TObject);
  881. label la;
  882. begin
  883.   JetFly := true;
  884.   if ie.Busy then goto la;
  885.   if self.IEDownloadCompleteNotify then
  886.   begin
  887.     if self.isRightLoginIEForm then
  888.     begin
  889.       takepicturesYZM.Click;
  890.       takepicturesPWD.Click;
  891.       btnidentifyYZM.Click;
  892.       btnidentifyPWD.Click;
  893.       btnApplay.Click;
  894.     end
  895.     else
  896.       if SELF.isBlankForm then
  897.       begin
  898.         msgok('isBlankForm'); //HTM := (SMTPForm.IE.Document as Ihtmldocument2).body.outerHtml
  899.       end;
  900.     ie.Navigate(EditUrl.Text);
  901.     IEDownloadCompleteNotify := false;
  902.   end;
  903.   la:
  904. end;
  905. procedure TMainFrm.ToolbtnEditClick(Sender: TObject);
  906. label la;
  907. begin
  908.   JetFly := true;
  909.   while JetFly do
  910.   begin
  911.     btnNew.Click;
  912.     Application.ProcessMessages;
  913.     sleep(2000);
  914.   end;
  915.   JetFly := false;
  916. end;
  917. end.
  918. 小酒二:识别    中国移动网上营业厅验证码
  919. unit MainForm;
  920. interface
  921. uses
  922.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  923.   Dialogs, StdCtrls, OleCtrls, SHDocVw,
  924.   ActiveX, ComObj, StdVcl,
  925.   shellapi, ShlObj, Registry, mshtml, ExtCtrls, ComCtrls, ToolWin, ImgList,
  926.   clipbrd, Menus, Buttons;
  927. type
  928.   sTel = record
  929.     SERIAL_NUMBER: string;
  930.     USER_PASSWD: string;
  931.     EFFICACY_CODE: string;
  932.   end;
  933.   TMainFrm = class(TForm)
  934.     Timer1: TTimer;
  935.     ImageList4: TImageList;
  936.     CoolBar2: TCoolBar;
  937.     ToolBar: TToolBar;
  938.     btnNew: TToolButton;
  939.     ToolbtnEdit: TToolButton;
  940.     btnAnalysis: TToolButton;
  941.     bitExit: TToolButton;
  942.     MainMenu1: TMainMenu;
  943.     N1: TMenuItem;
  944.     N2: TMenuItem;
  945.     N3: TMenuItem;
  946.     N4: TMenuItem;
  947.     N5: TMenuItem;
  948.     N6: TMenuItem;
  949.     N7: TMenuItem;
  950.     Panel1: TPanel;
  951.     Panel2: TPanel;
  952.     Panel3: TPanel;
  953.     ListView1: TListView;
  954.     Panel4: TPanel;
  955.     Panel5: TPanel;
  956.     Label1: TLabel;
  957.     EditUrl: TEdit;
  958.     Button1: TButton;
  959.     Button2: TButton;
  960.     btnApplay: TButton;
  961.     StatusBar1: TStatusBar;
  962.     IE: TWebBrowser;
  963.     SpeedButton1: TSpeedButton;
  964.     Label3: TLabel;
  965.     Memo1: TMemo;
  966.     ImageListTreeView: TImageList;
  967.     ltree: TTreeView;
  968.     Panel6: TPanel;
  969.     ToolButton2: TToolButton;
  970.     img1: TImage;
  971.     a1: TImage;
  972.     a2: TImage;
  973.     a3: TImage;
  974.     a4: TImage;
  975.     Edit3: TEdit;
  976.     Button7: TButton;
  977.     Label5: TLabel;
  978.     Panel7: TPanel;
  979.     Panel8: TPanel;
  980.     Label4: TLabel;
  981.     Edit2: TEdit;
  982.     Label2: TLabel;
  983.     takepicturesYZM: TButton;
  984.     Button6: TButton;
  985.     Button8: TButton;
  986.     b1: TImage;
  987.     btnidentifyYZM: TBitBtn;
  988.     Label6: TLabel;
  989.     Label7: TLabel;
  990.     ToolButton1: TToolButton;
  991.     procedure Button1Click(Sender: TObject);
  992.     procedure Button2Click(Sender: TObject);
  993.     procedure btnApplayClick(Sender: TObject);
  994.     procedure Timer1Timer(Sender: TObject);
  995.     procedure N4Click(Sender: TObject);
  996.     procedure FormShow(Sender: TObject);
  997.     procedure bitExitClick(Sender: TObject);
  998.     procedure FormCreate(Sender: TObject);
  999.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  1000.     procedure takepicturesYZMClick(Sender: TObject);
  1001.     procedure Button6Click(Sender: TObject);
  1002.     procedure Button7Click(Sender: TObject);
  1003.     procedure IENavigateComplete2(Sender: TObject; const pDisp: IDispatch;
  1004.       var URL: OleVariant);
  1005.     procedure IEStatusTextChange(Sender: TObject; const Text: WideString);
  1006.     procedure IETitleChange(Sender: TObject; const Text: WideString);
  1007.     procedure IEDownloadComplete(Sender: TObject);
  1008.     procedure btnidentifyYZMClick(Sender: TObject);
  1009.     procedure Button8Click(Sender: TObject);
  1010.     procedure btnNewClick(Sender: TObject);
  1011.     procedure ToolButton1Click(Sender: TObject);
  1012.   private
  1013.     function isBlankForm: boolean;
  1014.     function isRightLoginIEForm: boolean;
  1015.     { Private declarations }
  1016.   public
  1017.     { Public declarations }
  1018.     isDestroy: boolean;
  1019.     RootNode: ttreenode;
  1020.     IEDownloadCompleteNotify: BOOLEAN;
  1021.     JetFly: boolean;
  1022.     procedure save;
  1023.     function isSamePicture(pics, picd: timage): boolean;
  1024.     function identify(tmp: timage; index: string): string;
  1025.     function GetSimilar(TMP1, TMP2: TIMAGE): INTEGER;
  1026.   end;
  1027. var
  1028.   MainFrm: TMainFrm;
  1029.   Tel: sTel;
  1030. implementation
  1031. uses Unit2, DM_Unit, PPUBPAS, sndkey32;
  1032. {$R *.dfm}
  1033. procedure TMainFrm.Button1Click(Sender: TObject);
  1034. begin
  1035.   IE.Navigate(EditUrl.Text);
  1036. end;
  1037. procedure TMainFrm.Button2Click(Sender: TObject);
  1038. var
  1039.   HtmlDoc: IHTMLDocument2;
  1040.   InputText1, InputText2, InputText3, InputText4, InputText5: IHTMLInputTextElement; // Edit框
  1041.   TypeElement: variant;
  1042.   I: Integer;
  1043. begin
  1044. //  IE.Navigate(edit1.Text);
  1045. //  exit;
  1046.   HtmlDoc := IE.Document as IHTMLDocument2;
  1047.   for i := 0 to HtmlDoc.all.length - 1 do
  1048.   begin
  1049.     TypeElement := Htmldoc.all.item(i, varempty);
  1050.     if Uppercase(TypeElement.tagName) = 'INPUT' then
  1051.     begin
  1052.     // SHOWMESSAGE(TypeElement.type);
  1053.       if Uppercase(TypeElement.type) = 'TEXT' then // 填 Edit 框
  1054.       begin
  1055.         InputText1 := HtmlDoc.all.item(i, varempty) as IHTMLInputTextElement;
  1056.         if InputText1.name = 'SERIAL_NUMBER' then InputText1.value := tel.SERIAL_NUMBER;
  1057.         InputText4 := HtmlDoc.all.item(i, varempty) as IHTMLInputTextElement;
  1058.         if InputText4.name = 'EFFICACY_CODE' then InputText4.value := tel.EFFICACY_CODE;
  1059.         {
  1060.         InputText5 := HtmlDoc.all.item(i, varempty) as IHTMLInputTextElement;
  1061.         if InputText5.name = 'url' then InputText5.value := 'http://www.xxx.com';
  1062.         }
  1063.       end;
  1064.       if Uppercase(TypeElement.type) = 'PASSWORD' then // 填密码框
  1065.       begin
  1066.         InputText2 := HtmlDoc.all.item(i, varempty) as IHTMLInputTextElement;
  1067.         if InputText2.name = 'USER_PASSWD' then InputText2.value :=tel.USER_PASSWD;
  1068.         {
  1069.         InputText3 := HtmlDoc.all.item(i, varempty) as IHTMLInputTextElement;
  1070.         if InputText3.name = 'password2' then InputText3.value := '12345678';
  1071.         }
  1072.       end;
  1073.     end;
  1074.   end;
  1075. end;
  1076. procedure TMainFrm.btnApplayClick(Sender: TObject);
  1077. var
  1078.   HtmlDoc: IHTMLDocument2;
  1079.   myitem: Olevariant;
  1080.   i: integer;
  1081. begin
  1082.   myitem := IE.Document;
  1083.   for i := 0 to myitem.all.length - 1 do
  1084.   begin
  1085.     if myitem.all.item(i).tagName = 'INPUT' then
  1086.       if Uppercase(myitem.all.item(i).type) = 'SUBMIT' then
  1087.         if Uppercase(myitem.all.item(i).name) = 'BLOGIN' then
  1088.           myitem.all.item(i).click;
  1089.   end;
  1090. end;
  1091. procedure TMainFrm.Timer1Timer(Sender: TObject);
  1092. var
  1093.   ParentHandle, ChildHanlde: THandle;
  1094.   c: array[0..255of char;
  1095.   DrawPos: Tpoint;
  1096. begin
  1097.   GetCursorPos(DrawPos);
  1098.   StatusBar1.Panels.Items[3].Text := INTTOSTR(DrawPos.X);
  1099.   StatusBar1.Panels.Items[5].Text := INTTOSTR(DrawPos.Y);
  1100.  
  1101. end;
  1102. procedure TMainFrm.N4Click(Sender: TObject);
  1103. begin
  1104.   close;
  1105. end;
  1106. procedure TMainFrm.bitExitClick(Sender: TObject);
  1107. begin
  1108.   CLOSE;
  1109. end;
  1110. procedure TMainFrm.FormCreate(Sender: TObject);
  1111. var rmf: TRMFolderInfo;
  1112. begin
  1113.   tel.SERIAL_NUMBER := '13759409546';
  1114.   tel.USER_PASSWD := '313889';
  1115.   tel.EFFICACY_CODE := '1010';
  1116.   DispHwnd := self.Memo1;
  1117.   DM := TDM.Create(nil);
  1118.   if dm.ConnectDataBaseOK then
  1119.     StatusBar1.Panels.Items[1].Text := '连接正常'
  1120.   else
  1121.     StatusBar1.Panels.Items[1].Text := '连接失败';
  1122.   rmf := TRMFolderInfo.Create;
  1123.   rmf.Name := '策略树';
  1124.   rmf.FolderId := c_null_guid;
  1125.   RootNode := ltree.Items.AddObjectFirst(nil, rmf.Name, rmf);
  1126.   dm.sq := 'select * FROM TJ_Month where ParentMGUID=' + sy(c_null_guid);
  1127.   DM.O;
  1128.   while not dm.Eof do
  1129.   begin
  1130.     rmf := TRMFolderInfo.Create;
  1131.     rmf.FolderId := dm.gfs('tj_monthmguid');
  1132.     rmf.ParentId := FORMATDATETIME('YYYY-MM-dd', DM.Q1.FieldByName('建立日期').AsDateTime);
  1133.     rmf.Name := dm.gfs('标题');
  1134.     ltree.Items.AddChildObject(RootNode, dm.gfs('标题') + '(' + rmf.ParentId + ')', rmf);
  1135.     dm.Next;
  1136.   end;
  1137.   RootNode.Expanded := true;
  1138.   isDestroy := False;
  1139.   ltree.Items.Item[0].Selected := true;
  1140.   ie.Navigate(EditUrl.Text);
  1141. end;
  1142. procedure TMainFrm.FormShow(Sender: TObject);
  1143. var h: hwnd;
  1144. begin
  1145.   SELF.Caption := '自动填表小工具 V1.0';
  1146.   h := findwindow(nil'自动填表小工具 V1.0');
  1147.     //PostMessage(hwnd,WM_SYSCOMMAND, SC_MINIMIZE,0); //最小化
  1148.   PostMessage(h, WM_SYSCOMMAND, SC_MAXIMIZE, 0); //最大化
  1149.     //PostMessage(hwnd,WM_SYSCOMMAND, SC_CLOSE,0);//关闭
  1150.   Panel4.Align := alclient;
  1151. end;
  1152. procedure TMainFrm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  1153. begin
  1154.   if dm <> nil then
  1155.   begin
  1156.     freeandnil(dm);
  1157.   end;
  1158. end;
  1159. procedure TMainFrm.save;
  1160. var elem: IHTMLElement; //     使用需     uses  Mshtml,SHDocVw;
  1161.   coll: IHTMLElementCollection; //    mshtm类
  1162.   i: Integer;
  1163.   url, Text: string;
  1164.   d2, D: IHTMLDocument2;
  1165.   d1: IHTMLDocument;
  1166.   e: IHTMLElement;
  1167.   e2: IHTMLElement2;
  1168.   cp: IHTMLControlRange;
  1169.   img: IHTMLImgElement;
  1170.   ce: IHTMLControlElement;
  1171.   bmp: TBitmap;
  1172.   r0: TRect;
  1173.   newbmp: TBitmap;
  1174.   r1: TRect;
  1175.   checkstr: string;
  1176.   MyHandle: THandle;
  1177.   bmpPtr: Pointer;
  1178. begin
  1179.   try
  1180.     while IE.Busy do Application.ProcessMessages;
  1181.     IE.Stop;
  1182.     if IE.Document = nil then Exit;
  1183.     D := IE.Document as IHTMLDocument2;
  1184.     e := d.body as IHTMLElement;
  1185.     e2 := e as IHTMLElement2;
  1186.     cp := e2.createControlRange as IHTMLControlRange;
  1187.     d2 := IE.Document as IHTMLDocument2;
  1188.     coll := d.all;
  1189.     coll := (coll.tags('img'as IHTMLElementCollection);
  1190.     for i := 0 to coll.Length - 1 do
  1191.     begin //   循环取出每个url
  1192.       elem := (coll.item(i, 0as IHTMLElement);
  1193.       url := Trim(string(elem.getAttribute(WideString('src'), 0)));
  1194.          //Text := Trim(string(elem.outertext));
  1195.       if pos('getCheckImg', url) > 0 then
  1196.       begin
  1197.         Break;
  1198.       end;
  1199.           //DebugInfo(text+#13#10+url) ;
  1200.       Application.ProcessMessages;
  1201.     end;
  1202.     img := elem as IHTMLImgElement;
  1203.     ce := img as IHTMLControlElement;
  1204.     cp.add(ce);
  1205.     try
  1206.      // Clipboard.Open;
  1207.       Clipboard.Clear;
  1208.      // if   Clipboard.hasFormat(CF_BITMAP) then
  1209.       begin
  1210.         try
  1211.           cp.execCommand('Copy'false0);
  1212.           MyHandle := Clipboard.GetAsHandle(cf_Bitmap);
  1213.           bmpPtr := GlobalLock(MyHandle);
  1214.           img1.Picture.Bitmap.Assign(Clipboard);
  1215.           img1.Picture.LoadFromClipboardFormat(cf_BitMap, MyHandle, 0);
  1216.           Clipboard.Clear;
  1217.           GlobalUnlock(MyHandle);
  1218.         finally
  1219.           Clipboard.Close;
  1220.         end;
  1221.       end;
  1222.       bmp := (img1.Picture.Bitmap as TBitmap);
  1223.     except
  1224.       img1.Picture.LoadFromClipboardFormat(cf_BitMap, ClipBoard.GetAsHandle(cf_Bitmap), 0);
  1225.       checkstr := '';
  1226.     end;
  1227.   finally
  1228.   end;
  1229. end;
  1230. procedure TMainFrm.takepicturesYZMClick(Sender: TObject);
  1231. begin
  1232.   img1.Picture.Bitmap := nil;
  1233.   BitBlt(img1.Canvas.Handle, 004822, self.Canvas.Handle, 899522, SRCCOPY);
  1234.   a1.Picture.Bitmap := nil;
  1235.   a2.Picture.Bitmap := nil;
  1236.   a3.Picture.Bitmap := nil;
  1237.   a4.Picture.Bitmap := nil;
  1238.   BitBlt(a1.Canvas.Handle, 001222, img1.Canvas.Handle, 00, SRCCOPY);
  1239.   BitBlt(a2.Canvas.Handle, 001222, img1.Canvas.Handle, 110, SRCCOPY);
  1240.   BitBlt(a3.Canvas.Handle, 001222, img1.Canvas.Handle, 220, SRCCOPY);
  1241.   BitBlt(a4.Canvas.Handle, 001222, img1.Canvas.Handle, 330, SRCCOPY);
  1242. end;
  1243. procedure TMainFrm.Button6Click(Sender: TObject);
  1244. begin
  1245.   SetCursorPos(741500);
  1246.   Mouse_Event(MOUSEEVENTF_LEFTDOWN, 74150000);
  1247.   Mouse_Event(MOUSEEVENTF_LEFTUP, 74150000);
  1248. end;
  1249. procedure TMainFrm.Button7Click(Sender: TObject);
  1250. begin
  1251.   edit3.text := trim(edit3.text);
  1252.   if length(edit3.Text) <> 4 then
  1253.   begin
  1254.     msgok('必须输入4位数!');
  1255.     edit3.SetFocus;
  1256.     exit;
  1257.   end;
  1258.   a1.Picture.SaveToFile(CurPath + 'template/d1_is_' + copy(edit3.text, 11) + '.bmp');
  1259.   a2.Picture.SaveToFile(CurPath + 'template/d2_is_' + copy(edit3.text, 21) + '.bmp');
  1260.   a3.Picture.SaveToFile(CurPath + 'template/d3_is_' + copy(edit3.text, 31) + '.bmp');
  1261.   a4.Picture.SaveToFile(CurPath + 'template/d4_is_' + copy(edit3.text, 41) + '.bmp');
  1262.   edit3.text := '';
  1263. end;
  1264. procedure TMainFrm.IENavigateComplete2(Sender: TObject;
  1265.   const pDisp: IDispatch; var URL: OleVariant);
  1266. begin
  1267.   StatusBar1.Panels.Items[5].Text := url;
  1268. end;
  1269. procedure TMainFrm.IEStatusTextChange(Sender: TObject;
  1270.   const Text: WideString);
  1271. begin
  1272.   StatusBar1.Panels.Items[7].Text := Text;
  1273. end;
  1274. procedure TMainFrm.IETitleChange(Sender: TObject; const Text: WideString);
  1275. begin
  1276.   StatusBar1.Panels.Items[7].Text := Text;
  1277. end;
  1278. procedure TMainFrm.IEDownloadComplete(Sender: TObject);
  1279. begin
  1280.   StatusBar1.Panels.Items[7].Text := 'DownloadComplete';
  1281.   IEDownloadCompleteNotify := true;
  1282. end;
  1283. function TMainFrm.isSamePicture(pics, picd: timage): boolean;
  1284. var i, j: integer;
  1285. begin
  1286.   result := false;
  1287.   for i := 1 to pics.Width - 1 do
  1288.   begin
  1289.     for j := 1 to pics.Height - 1 do
  1290.     begin
  1291.       if (pics.Canvas.Pixels[i, j] < rgb(128128128)) and (picd.Canvas.Pixels[i, j] > rgb(128128128)) then
  1292.       begin
  1293.     //    msgok('i=' + inttostr(i) + ' value:' + inttostr(pics.Canvas.Pixels[i, j]) + ' j=' + inttostr(j) + ' value:' + inttostr(picd.Canvas.Pixels[i, j]));
  1294.         exit;
  1295.       end;
  1296.     end;
  1297.   end;
  1298.   result := true;
  1299. end;
  1300. function TMainFrm.GetSimilar(TMP1, TMP2: TIMAGE): INTEGER;
  1301. var I, J: INTEGER;
  1302. begin
  1303.   RESULT := 0;
  1304.   for I := 0 to tmp1.Width - 1 do
  1305.     for J := 0 to tmp1.Height - 1 do
  1306.     begin
  1307.       if TMP1.Canvas.Pixels[I, J] = tmP2.Canvas.Pixels[I, J] then INC(RESULT);
  1308.     end;
  1309. //  result := abs(xx1 - bb1);
  1310. end;
  1311. function tMainFrm.identify(tmp: timage; index: string): string;
  1312. var i, j: integer;
  1313. begin
  1314.   result := '?';
  1315.  
  1316.   for i := 0 to 9 do
  1317.   begin
  1318.     b1.Picture.Bitmap := nil;
  1319.     b1.Picture.LoadFromFile(CurPath + 'template/d' + index + '_is_' + inttostr(i) + '.bmp');
  1320.     if isSamePicture(b1, tmp) then
  1321.     begin
  1322.       result := inttostr(i);
  1323.       break;
  1324.     end;
  1325.   end;
  1326. end;
  1327. procedure TMainFrm.btnidentifyYZMClick(Sender: TObject);
  1328. begin
  1329.   edit2.text := '';
  1330.   edit2.text := edit2.text + identify(a1, '1');
  1331.  {
  1332.   if self.isSamePicture(b1, b2) then
  1333.     msgok('b1 is  b2')
  1334.   else
  1335.     msgok('b1 not is b2');
  1336.   if self.isSamePicture(a1, b2) then
  1337.     msgok('a1 is b2')
  1338.   else
  1339.     msgok('a1 not is b2');
  1340.   }
  1341.   edit2.text := edit2.text + identify(a2, '2');
  1342.   edit2.text := edit2.text + identify(a3, '3');
  1343.   edit2.text := edit2.text + identify(a4, '4');
  1344. end;
  1345. procedure TMainFrm.Button8Click(Sender: TObject);
  1346. var h: HWnd;
  1347.   ch: HWnd;
  1348.   i: integer;
  1349.   buf: array[0..1024of char;
  1350. begin
  1351.   sendkeys('~'false); //enter
  1352.  // sendkeys('~', false); crtl+enter
  1353. end;
  1354. function TMainFrm.isRightLoginIEForm: boolean;
  1355. var
  1356.   HtmlDoc: IHTMLDocument2;
  1357.   InputText1: IHTMLInputTextElement; // Edit框
  1358.   TypeElement: variant;
  1359.   I: Integer;
  1360. begin
  1361.   result := false;
  1362.   HtmlDoc := IE.Document as IHTMLDocument2;
  1363.   for i := 0 to HtmlDoc.all.length - 1 do
  1364.   begin
  1365.     TypeElement := Htmldoc.all.item(i, varempty);
  1366.     if Uppercase(TypeElement.tagName) = 'INPUT' then
  1367.     begin
  1368.       if Uppercase(TypeElement.type) = 'TEXT' then // 填 Edit 框
  1369.       begin
  1370.         InputText1 := HtmlDoc.all.item(i, varempty) as IHTMLInputTextElement;
  1371.         if InputText1.name = 'bankcardno' then
  1372.         begin
  1373.           result := true;
  1374.           exit;
  1375.         end;
  1376.       end;
  1377.     end;
  1378.   end;
  1379. end;
  1380. function TMainFrm.isBlankForm: boolean;
  1381. var
  1382.   HtmlDoc: IHTMLDocument2;
  1383.   htm: string;
  1384. begin
  1385.   result := false;
  1386.   HTM := (IE.Document as Ihtmldocument2).body.outerHtml;
  1387.   if pos('您正在查找的页当前不可用。 网站可能遇到支持问题,或者您需要 调整', htm) > 0 then
  1388.     result := true;
  1389. end;
  1390. procedure TMainFrm.btnNewClick(Sender: TObject);
  1391. label la;
  1392. begin
  1393.   JetFly := true;
  1394.   if ie.Busy then goto la;
  1395.   if self.IEDownloadCompleteNotify then
  1396.   begin
  1397.     if self.isRightLoginIEForm then
  1398.     begin
  1399.       takepicturesYZM.Click;
  1400.       btnidentifyYZM.Click;
  1401.       btnApplay.Click;
  1402.     end
  1403.     else
  1404.       if SELF.isBlankForm then
  1405.       begin
  1406.         msgok('isBlankForm'); //HTM := (SMTPForm.IE.Document as Ihtmldocument2).body.outerHtml
  1407.       end;
  1408.     ie.Navigate(EditUrl.Text);
  1409.     IEDownloadCompleteNotify := false;
  1410.   end;
  1411.   la:
  1412. end;
  1413. procedure TMainFrm.ToolButton1Click(Sender: TObject);
  1414. label la;
  1415. begin
  1416.   JetFly := true;
  1417.   if ie.Busy then goto la;
  1418.   if self.IEDownloadCompleteNotify then
  1419.   begin
  1420.     if self.isRightLoginIEForm then
  1421.     begin
  1422.       takepicturesYZM.Click;
  1423.       btnidentifyYZM.Click;
  1424.       btnApplay.Click;
  1425.     end
  1426.     else
  1427.       if SELF.isBlankForm then
  1428.       begin
  1429.         msgok('isBlankForm'); //HTM := (SMTPForm.IE.Document as Ihtmldocument2).body.outerHtml
  1430.       end;
  1431.     ie.Navigate(EditUrl.Text);
  1432.     IEDownloadCompleteNotify := false;
  1433.   end;
  1434.   la:
  1435. end;
  1436. end.
  1437.   
内容概要:本文系统研究了全桥LLC谐振变换器的脉冲频率调制(PFM)控制策略,深入剖析其拓扑结构与工作原理,涵盖全桥逆变电路、谐振回路(Lr、Cr、Lm)、变压器及整流滤波电路的功能与协同机制。文章详细分析了变换器在不同开关频率下的三种工作模式(fs > fr、fs = fr、fm < fs < fr),阐明了其在感性区域实现原边零电压开通(ZVS)副边零电流关断(ZCS)的软开关特性。重点阐述了PFM控制通过调节开关频率来改变谐振阻抗,从而稳定输出电压的基本原理,并论证了其在高效率(尤其轻载时)、低电磁干扰(EMI)宽输入输出范围方面的显著优势。研究构建了基于Matlab/Simulink的完整仿真模型,对系统的稳态性能、动态响应(负载突变)效率进行了全面仿真验证,结果证实PFM控制能有效实现输出电压的精确稳定,具备优良的动态响应能力全负载范围内的高效率。最后,文章总结了PFM策略的有效性,并展望了结合自抗扰控制(ADRC)等先进算法优化控制性能及开展硬件实验验证的未来发展方向。; 适合人群:具备电力电子、自动控制或相关领域基础知识的研究生、科研人员及从事高性能电源设计的工程技术人员。; 使用场景及目标:①深入理解LLC谐振变换器的拓扑结构、工作模式划分及其软开关物理机制;②掌握PFM控制策略的设计思想、参数整定方法及其在提升电源转换效率与降低EMI中的核心应用;③为开发高效率、高可靠性的开关电源(如通信电源、服务器电源)提供理论依据、仿真建模指导与性能优化的技术参考。; 阅读建议:在阅读时应紧密结合文中给出的仿真模型框图与关键波形,重点精读工作模式分析与PFM控制原理部分,建议动手复现仿真以深刻体会频率调节对增益效率的影响规律,并特别关注轻载效率表现,同时思考未来展望中提及的先进控制算法融合方向,以激发创新研究思路。
内容概要:本文系统介绍了基于Matlab的多架无人机编队控制与轨迹规划技术实现方案,聚焦于一致性分布式控制、多领航者架构、编队跟随控制及轨迹跟踪等核心算法的建模与仿真。通过Matlab代码实现了多无人机系统的编队形成、保持与动态调整,并融合RRT、人工势场法、粒子群优化(PSO)、Q-learning等智能算法,完成复杂环境下的路径规划与避障任务。文档还深入探讨了滑模控制、反步法、模型预测控制(MPC)等多种先进控制策略在无人机协同中的应用,展现了系统在动态干扰不确定环境下的鲁棒性与自适应能力。配套提供的完整Matlab代码涵盖多种编队模式与控制算法对比案例,支持二次开发与性能验证。; 适合人群:具备自动控制理论基础Matlab编程能力的科研人员、研究生及从事无人机系统开发的工程技术人员,尤其适用于研究多智能体协同控制、分布式编队与自主路径规划方向的专业人士。; 使用场景及目标:① 实现多无人机在复杂动态环境中的高效协同飞行与稳定编队;② 解决队形切换、轨迹实时优化与动态障碍物规避等关键问题;③ 为学术研究、毕业设计或实际工程项目提供可复现的算法框架与仿真平台支持; 其他说明:文中所有Matlab仿真代码可通过指定百度网盘链接下载,建议结合仿真运行深入理解算法细节,并根据具体应用场景进行参数调优与算法拓展。
内容概要:本文研究基于动态非合作博弈的大规模电动汽车实时优化调度决策方法,通过构建博弈论模型刻画电动汽车用户间的竞争行为,利用Matlab实现算法仿真与求解。研究将复杂的充电调度问题建模为动态非合作博弈形式,分析各电动汽车作为理性个体在电网负荷、电价及用户偏好等多重约束下的最优充放电策略,实现去中心化、分布式的实时调度优化。结合动态博弈理论与电力系统运行特性,文章深入探讨了纳什均衡的存在性、唯一性及迭代求解的收敛性,并通过仿真实验验证该方法在平抑电网负荷峰值、降低用户用电成本、提升可再生能源消纳能力以及增强电网运行稳定性方面的综合效益。; 适合人群:具备博弈论、优化理论、电力系统基础及相关数学建模能力,从事智能电网、电动汽车调度、能源互联网、车网互动(V2G)等方向研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于大规模电动汽车接入背景下的实时需求响应与分布式调度系统设计;②为电力公司制定动态电价机制、激励策略及负荷管理政策提供理论依据与技术支持;③促进车网互动技术的实际落地,推动新型电力系统中用户侧资源的高效协同与优化利用; 阅读建议:读者应结合提供的Matlab代码深入理解模型构建与算法实现细节,重点关注博弈模型的效用函数设计、约束条件处理、均衡求解过程及仿真参数设置,建议使用真实或模拟数据进行复现与拓展实验,以全面掌握其应用逻辑与优化潜力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值