在 delphi 中使用 TWebbrowse 组件,虽然效率不如用(idhttp之类)模拟操作效率高。但其难度低,上手快,简单粗暴有效。

从网上搜到的处理此问题的文章大多是 ctrl + c 复制到剪贴板的方法,但在 win7 64中,此法几乎没法使用,随时报剪贴板错误。

本方法利用 IHTMLElementRender 接口,完美地解决了问题。同时,也可以加深对接口的进一步理解。

delphi7源码下载

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, OleCtrls, SHDocVw, MSHtml;
type
// 此定义是从 XE8 的 MSHTML 单元中抄的
IHTMLElementRender = interface(IUnknown)
['{3050F669-98B5-11CF-BB82-00AA00BDCE0B}']
function DrawToDC(hdc: hdc): HResult; stdcall;
function SetDocumentPrinter(const bstrPrinterName: WideString; hdc: hdc): HResult; stdcall;
end; TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
Image1: TImage;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
FFirstShow: Boolean;
FCodeBmp: TBitmap;
end; var
Form1: TForm1; implementation
const
csUrl = 'https://account.guokr.com/sign_in/?';
{$R *.dfm} procedure TForm1.FormCreate(Sender: TObject);
begin
FFirstShow := true;
FCodeBmp := TBitmap.Create;
FCodeBmp.Height := ;
FCodeBmp.Width := ;
FCodeBmp.PixelFormat := pf24bit;
end; procedure TForm1.FormShow(Sender: TObject);
begin
// 做一个 FirstOnShow 功能。
// OnCreate 事件中使用 WebBrowser1.Navigate 的话,会出错的。
if FFirstShow then
begin
WebBrowser1.Navigate(csUrl);
FFirstShow := false;
end;
end; procedure TForm1.Button1Click(Sender: TObject);
var
Doc: IHTMLDocument2;
Render: IHTMLElementRender;
begin
Doc := WebBrowser1.Document as IHTMLDocument2;
Render := Doc.All.Item('captchaImage', EmptyParam) as IHTMLElementRender;
Render.DrawToDC(Self.Canvas.Handle);
Render.DrawToDC(FCodeBmp.Canvas.Handle);
Image1.Picture.Assign(FCodeBmp);
end; end.

delphi 从 TWebbrowse组件中获取图片的更多相关文章

  1. 用Delphi从内存流中判断图片格式[转]

    http://blog.163.com/tfn2008%40yeah/blog/static/110321319201222243214337/ 用Delphi从内存流中判断图片格式[转] 2012- ...

  2. angular2的ElementRef在组件中获取不到

    angular2的ElementRef在组件中获取不到 angular2不推荐操作dom,但是实际应用中不可避免的需要使用到dom操作,怎么操作,官方文档提供了一系列api(ElementRef,Vi ...

  3. java如何从一段html代码中获取图片的src路径

    java如何从一段html代码中获取图片的src路径 package com.cellstrain.icell.Test; import java.util.ArrayList;import java ...

  4. 微信小程序在组件中获取界面上的节点信息wx.createSelectorQuery

    节点信息查询 API 可以用于获取节点属性.样式.在界面上的位置等信息. 最常见的用法是使用这个接口来查询某个节点的当前位置,以及界面的滚动位置. 示例代码: const query = wx.cre ...

  5. 在自定义组件中获取spring底层组件

    要想在自定义组件中获取spring底层的各种组件,只需让自定义组件实现一系列接口即可,这些接口都是Aware的子接口.常见的有: 1. ApplicationContextAware——用于获取IOC ...

  6. vue父组件中获取子组件中的数据

    <FormItem label="上传头像" prop="image"> <uploadImg :width="150" ...

  7. 从网络中获取图片显示到Image控件并保存到磁盘

    一.从网络中获取图片信息: /// <summary> /// 获取图片 /// </summary> /// <param name="url"&g ...

  8. Android中获取图片的宽和高

    在Android中,我们想获取图片的宽和高应该怎么办?一.正常加载图片的方法下获取宽和高 举一个简单的例子:创建一个图片的副本 //加载原图 Bitmap bmSrc = BitmapFactory. ...

  9. Java乔晓松-android中获取图片的缩略图(解决OutOfMemoryError)内存溢出的Bug

    由于android获取图片过大是会出现内存溢出的Bug 07-02 05:10:13.792: E/AndroidRuntime(6016): java.lang.OutOfMemoryError 解 ...

随机推荐

  1. Kafka+SparkStreaming+Zookeeper(ZK存储Offset,解决checkpoint问题)

    创建一个topic ./kafka-topics.sh --create --zookeeper 192.168.1.244:2181,192.168.1.245:2181,192.168.1.246 ...

  2. Codeforces Round #367 (Div. 2) A , B , C

    A. Beru-taxi time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  3. matlab *与.*的区别

    语言用来用去老是容易忘... 还是记下来比较好点.... (1)   " * "   即矩阵乘法,两个矩阵必须满足左边矩阵的列数等于右边矩阵的行数,如: A(m,k) * B(k, ...

  4. scheduler configuration options

    Table 4.53. Description of scheduler configuration options Configuration option = Default value Desc ...

  5. HTTP通道

    通过httptunnel技术进行入侵示例 httptunnel是通过HTTP通道来传输其他协议数据的工具软件,下载地址为:www.http-tunnel. com,目前最新版本3.0.5 工具/原料 ...

  6. Django 基础 路由系统

    Django框架简介 MVC框架和MTV框架(了解即可) MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图 ...

  7. LeetCode OJ:Binary Tree Level Order Traversal II(二叉树的层序遍历)

    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...

  8. 《ASP.NET夜话》 - 书摘精要

    (P14) 如果客户端启用了Cookie,那么客户端与服务器之间通过Cookie来传递SessionID的值:如果客户端没有启用Cookie,就会通过URL来传递SessionID的值: (P15) ...

  9. php mysql 查询

    抓取结果集对象中数据并且转换数组 $row = mysqli_fetch_assoc(结果集对象); 从结果集对象中抓取一行记录->转换关联数组 $row = mysqli_fetch_row( ...

  10. c语言%.*s是什么

    int i; ;i<;i++) printf("%.*s%s\n", i, " ", "########"); ; *用来指定宽度,对 ...