我需要实现一个屏幕捕获服务(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等;
但是我在剪贴板上得到的只是一个黑色矩形 - 当复制到paint中时,可以推测通过CreatCompatibleBitmap创建的普通位图数据。
如果我使用PrintWindow而不是IViewObject :: Draw那么它可以工作,我怎么也不能使用它,因为它不适用于不可见的窗口(尽管在我的测试中,一切都是可见的)。
任何想法都有错误吗?
非常感谢。
答案 0 :(得分:0)
但是,我想我应该有一些错误告诉你。