Delphi 如何在TWebBrowser autoscroll导航到所需位置的末尾以编程方式执行

Delphi 如何在TWebBrowser autoscroll导航到所需位置的末尾以编程方式执行,delphi,delphi-xe7,twebbrowser,Delphi,Delphi Xe7,Twebbrowser,我想知道如何在TWebBrowser(Delphi XE7)的导航结束时以编程方式强制此浏览器从左上角显示页面(某种自动滚动)。由于未知原因,web浏览器在导航结束时向右滚动 我从网上尝试了各种解决方案发送消息是其中之一: SendMessage(WebBrowser1.Handle, WM_HSCROLL, 0 , 0); 但这一切都不管用。有什么想法吗 简单而正确的方法是使用DOM,而不是向WebBrowser发送消息。 e、 g: 为什么发送消息(WebBrowser1.Handle,…

我想知道如何在
TWebBrowser
(Delphi XE7)的导航结束时以编程方式强制此浏览器从左上角显示页面(某种自动滚动)。由于未知原因,web浏览器在导航结束时向右滚动

我从网上尝试了各种解决方案<代码>发送消息是其中之一:

SendMessage(WebBrowser1.Handle, WM_HSCROLL, 0 , 0);

但这一切都不管用。有什么想法吗

简单而正确的方法是使用DOM,而不是向WebBrowser发送消息。 e、 g:

为什么
发送消息(WebBrowser1.Handle,…)
不起作用?

TWebBrowser.Handle
不是您应该向其发送消息的IE句柄。它是一个包装窗口(
Shell嵌入
),包含类名称为
internetexplorer\u Server
的IE窗口。 根据IE版本和文档模式,结构可能是(使用Spy++检查结构):

并发送信息:

IEHandle := GetIEHandle(WebBrowser1);
if IEHandle <> 0 then
begin
  SendMessage(IEHandle, WM_HSCROLL, SB_LEFT ,0);
  SendMessage(IEHandle, WM_VSCROLL, SB_TOP ,0);
end;
IEHandle:=GetIEHandle(WebBrowser1);
如果是0,那么
开始
SendMessage(IEHandle,WM_HSCROLL,SB_LEFT,0);
SendMessage(IEHandle、WM_VSCROLL、SB_TOP、0);
结束;

您能告诉我们如何重现这种行为吗
Shell Embedding
  Shell DocObject View
    Internet Explorer_Server <- send message to this window
function EnumChilds(hwnd: HWND; lParam: LPARAM): BOOL; stdcall;
const
  Server = 'Internet Explorer_Server';
var
  ClassName: array[0..24] of Char;
begin
  GetClassName(hwnd, ClassName, Length(ClassName));
  Result := ClassName <> Server;
  if not Result then
    PLongWord(lParam)^ := hwnd;
end;

function GetIEHandle(AWebBrowser: TWebbrowser): HWND;
begin
  Result := 0;
  EnumChildWindows(AWebBrowser.Handle, @EnumChilds, LongWord(@Result));
end;
IEHandle := GetIEHandle(WebBrowser1);
if IEHandle <> 0 then
begin
  SendMessage(IEHandle, WM_HSCROLL, SB_LEFT ,0);
  SendMessage(IEHandle, WM_VSCROLL, SB_TOP ,0);
end;