gpt4 book ai didi

internet-explorer - 如何在 Internet Explorer 浏览器帮助程序对象中获取呈现网页的窗口的 HWND

转载 作者:行者123 更新时间:2023-12-01 03:33:05 26 4
gpt4 key购买 nike

我正在用 Visual C++ 编写一个浏览器助手对象,它需要对呈现的网页进行全长截图。目前,我正在 BHO 中捕获 DocumentComplete 事件。我得到了浏览器的 hWnd,可以截屏,但这不是我真正需要的。我真的需要呈现页面的窗口(而不是带有滚动条的框架)。

此外,我目前正在遇到一种竞争情况,即当我截屏时浏览器可能尚未呈现页面。我添加了对 UpdateWindow 的调用但即使在返回 true 之后,有时窗口还没有被渲染。

所以,总结一下:

1) 如何获取渲染的 HTML 窗口的 hWnd
2) BHO 可用于截取屏幕截图的适当事件是什么?

编辑:

根据以下答案,我创建了以下代码:

        MSHTML::IHTMLRectPtr pRect2 = pBody2->getBoundingClientRect();

long width = pRect2->right;
long height = pRect2->bottom;

RECTL imageRect = { 0, 0, width, height };

IViewObject *pViewObject = NULL;
pHtmlDocument2->QueryInterface(IID_IViewObject, (void**)&pViewObject);

HDC hdcScreen = GetDC(NULL);
HDC hCompDc = CreateCompatibleDC(hdcScreen);

pViewObject->Draw(DVASPECT_CONTENT, -1, NULL, NULL, NULL, hCompDc, NULL, &imageRect, NULL, 0);

HBITMAP hbmp = CreateCompatibleBitmap(hCompDc, imageRect.right - imageRect.left, imageRect.bottom - imageRect.top);
SelectObject(hCompDc, hbmp);

Bitmap *image = new Bitmap(hbmp, NULL);

long bitLength = (imageRect.right - imageRect.left) * (imageRect.bottom - imageRect.top) * 4;
byte *bits = (byte*)malloc(bitLength);
memset(bits, 0, bitLength);

BITMAPINFO *info = new BITMAPINFO();

GetDIBits(hCompDc, hbmp, 0, imageRect.bottom - imageRect.top, bits, info, DIB_RGB_COLORS);

FILE* file = fopen("d:\\screenshot.bmp", "wb");
fwrite(bits, 1, bitLength, file);
fclose(file);

不幸的是,输出不是有效的位图。我不知道我做错了什么。请帮忙。

最佳答案

我假设你有 IWebBrowser2界面对吧?

然后我会得到一个 HTML 文档的接口(interface):

HRESULT IWebBrowser2::get_Document(IDispatch **ppDisp);

然后到 View ( as suggested here ),在提供的 DC 上绘制内容:
//hCompDc is a CompatibleDC which select a CompatibleBitmap.
RECTL imageRect = {0, 0, nWidth, nHeight};
pHtmlDocument2->QueryInterface(IID_IViewObject, (void **)&pViewObject);
pViewObject->Draw(DVASPECT_CONTENT, -1, NULL, NULL, NULL,
hCompDc, NULL, &imageRect, NULL, 0);

关于internet-explorer - 如何在 Internet Explorer 浏览器帮助程序对象中获取呈现网页的窗口的 HWND,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36750867/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com