delphi 从 TWebbrowse组件中获取图片
2021-04-10 04:29
标签:first navigate 网上 iunknown res sig csu 接口 效率 在 delphi 中使用 TWebbrowse 组件,虽然效率不如用(idhttp之类)模拟操作效率高。但其难度低,上手快,简单粗暴有效。 从网上搜到的处理此问题的文章大多是 ctrl + c 复制到剪贴板的方法,但在 win7 64中,此法几乎没法使用,随时报剪贴板错误。 本方法利用 IHTMLElementRender 接口,完美地解决了问题。同时,也可以加深对接口的进一步理解。 delphi7源码下载 delphi 从 TWebbrowse组件中获取图片 标签:first navigate 网上 iunknown res sig csu 接口 效率 原文地址:https://www.cnblogs.com/lackey/p/9053967.htmlunit 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 := 40;
FCodeBmp.Width := 100;
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组件中获取图片
文章链接:http://soscw.com/index.php/essay/73638.html