我在MFC工作,我正在尝试捕获桌面的bmp.我使用GetDC(NULL)来做到这一点,但它似乎忽略了特殊的蒙皮窗口.它似乎忽略了使用UpdateLayeredWindow绘制的窗口.这种行为似乎只发生在Vista x64和XP上.我也尝试过使用桌面HWND的GetWindowDC,结果是一样的.
注意:1)打印屏幕工作.2)在Vista上,如果我启用Aero,屏幕截图就可以了,会出现"特殊"窗口.因此,在Vista上,只有在Aero被禁用时才会发生.
一个想法?
谢谢.
这是我在此的头一篇博文.我有个问题.我需要对桌面进行一次扫描,将其转换为jpeg,将其存储在缓冲区中,然后对其进行操作并通过互联网发送.
我已经用GetDC ....和GDI +编写了用于将HBITMAP转换为jpeg的代码.我现在遇到的问题是我不知道已经保存到IStream中的jpeg的大小.以下是将HBITMAP hBackBitmap引用的位图转换为jpeg并将其保存到pStream中的代码的一部分.我需要知道已经将多少字节写入pStream以及如何使用pStream(获取PVOID句柄):
Gdiplus::Bitmap bitmap(hBackBitmap, NULL);///loading the HBITMAP
CLSID clsid;
GetEncoderClsid(L"image/jpeg", &clsid);
HGLOBAL hGlobal = GlobalAlloc(GMEM_FIXED, nBlockSize) ;//allocating memory, the size of the current bitmap size. i'm over allocating but i don't think there is any way to get the exact ammount I need to allocate, is there?
if(!hGlobal)
return;
IStream* pStream = NULL ;
if(CreateStreamOnHGlobal(hGlobal, TRUE, &pStream) != S_OK )
return;
bitmap.Save(pStream, &clsid);
Run Code Online (Sandbox Code Playgroud)
我需要的是:1.找出jpeg的大小,在流中写入了多少字节2.如何使用流.例如,我可以获取流中数据的PVOID吗?
谢谢.