对于delphi自带的TWebBrowser控件,可容易地得到IHTMLdocument2接口(代码如下)但若只知道某IE窗口的句柄,如何由此得到该窗口的IHTMLdocument2接口?Thanks in advance.///////////////////////////////////////////////////////////////////////
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw, StdCtrls, ActiveX, MSHtml;type
TForm1 = class(TForm)
Button1: TButton;
WebBrowser1: TWebBrowser;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
doc:IHTMLdocument2;
elem:IHTMLElement;
begin
try
doc:=WebBrowser1.document as IHTMLdocument2;
if doc = nil then
begin
self.Caption := 'NULL';
end
else
begin
elem:=doc.all.item('mybuttonid',0) as IHTMLElement;
elem.click;
end
except
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
WebBrowser1.Navigate('c:\temp\html.html');
end;end.
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw, StdCtrls, ActiveX, MSHtml;type
TForm1 = class(TForm)
Button1: TButton;
WebBrowser1: TWebBrowser;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
doc:IHTMLdocument2;
elem:IHTMLElement;
begin
try
doc:=WebBrowser1.document as IHTMLdocument2;
if doc = nil then
begin
self.Caption := 'NULL';
end
else
begin
elem:=doc.all.item('mybuttonid',0) as IHTMLElement;
elem.click;
end
except
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
WebBrowser1.Navigate('c:\temp\html.html');
end;end.
解决方案 »
- delphi7与delphi2010中char()函数问题
- IdUDPClient和IdUDPServer,广播方式没法通信?
- DBGrid批量提交数据问题
- 一个很菜的问题,请大家帮看看.
- ΘDelphi蔼も
- 怎样判断COMBOX中有几行数据呢?/?
- adoQuery 操作access数据库的错误,帮忙看看!
- 如何通过delphi 如一按button 按扭将excel 文件显示在form中,并存入sql2000
- 怎样在程序中执行.SQL文件?
- 高分!请问:写一个浏览器插件能否实现这样的功能---服务器发来信息时,先由此插件处理,然后再交给浏览器
- ★★★★★★我喜欢的女孩给我发来的短信,兄弟们、MM们请帮我分析一下,forgot给你们磕头了!★★★★★★
- 有人知道吗?
type
TObjectFromLResult = function(LRESULT: lResult; const IID: TIID; WPARAM: wParam; out pObject): HRESULT; stdcall;
var
hInst: THandle;
lRes: Cardinal;
MSG: Integer;
pDoc: IHTMLDocument2;
ObjectFromLresult: TObjectFromLresult;
begin
result:=S_OK;
if (hWnd<=0) then
exit;
hInst := LoadLibrary('Oleacc.dll');
if (hInst>0) then
try
@ObjectFromLresult := GetProcAddress(hInst, 'ObjectFromLresult');
MSG := RegisterWindowMessage('WM_HTML_GETOBJECT');
SendMessageTimeOut(hWnd, MSG, 0, 0, SMTO_ABORTIFHUNG, 1000, lRes);
Result := ObjectFromLresult(lRes, IID_IHTMLDocument2, 0, pDoc);
if Result = S_OK then
begin
(pDoc.parentWindow as IServiceprovider).QueryService(IWebbrowserApp, IWebbrowser2, IE);
end;
finally
FreeLibrary(hInst);
end;
end;