我需要实现一个屏幕捕获服务 (C++),它启动即导航到一个站点,然后抓取该站点。
我加载了站点并收到了 DISPID_FRAMENAVIGATECOMPLETE 事件,我正处于调用 IViewObject::Draw 的阶段,如下所示:
SHANDLE_PTR hwnd = 0;
browser->get_HWND(&hwnd);
RECT rc ={0,0,100, 100};
BOOL tst = GetClientRect((HWND)hwnd, &rc);
HDC hDC = GetDC((HWND)hwnd);
HDC hDCMem = CreateCompatibleDC(hDC);
HBITMAP hBitmap = CreateCompatibleBitmap(hDC, rc.right - rc.left,
rc.bottom - rc.top);
SelectObject(hDCMem, hBitmap);
//hr = OleDraw(ivo, DVASPECT_DOCPRINT, hdc, &rc);
hr = ivo->Draw(DVASPECT_CONTENT, -1, NULL, NULL, hDC,
hDCMem, (LPCRECTL)&rc, NULL, NULL, 0);
//copy to clipboard
OpenClipboard(NULL);
EmptyClipboard();
SetClipboardData(CF_BITMAP, hBitmap);
CloseClipboard();
一切都返回正确的返回值,S_OK 等;
但是我在剪贴板上得到的只是一个黑色矩形 - 当复制到绘画中时,这可能是通过 CreatCompatibleBitmap 创建的普通位图数据。
如果我使用 PrintWindow 而不是 IViewObject::Draw 那么它可以工作,但是我不能使用它,因为它不适用于不可见的窗口(尽管目前在我的测试中一切都是可见的)。
有人知道代码有什么问题吗?
非常感谢。