есть код, который делает снимок с окна IE(причём полностью всего, а не только содержимого страницы - надо именно так) .
Всё хорошо работает снимок делается, в файлик записывается, но тут оказывается интересный момент, что на IE 6 — всё отлично работает, а на IE 8 — от случая к случаю, т.е. например, если открыт сайт youip.ru — всё будет хорошо, а вот если в строку адреса передать, например mail.ru или yandex.ru — то отобразит всё, кроме содержимого страницы, на этом месте будет чёрный квадрат, причём не всегда. Может отработать корректно и всё будет отлично.
вот код, которым делаю снимок и сохраняю в файл.
hFind — HANDLE окна(ИЕ),
RECT rcWnd;
HDC hDCMem;
HBITMAP hBmMem;
HGDIOBJ hBmOld;
HDC hDCScr;
PBYTE pBmData;
PBITMAPINFO pBmInf;
HANDLE hFile;
int nResult = 0;
WORD wWidth;
WORD wHeight;
GetWindowRect(hFind, &rcWnd );
wWidth = (rcWnd.right - rcWnd.left);
wHeight = (rcWnd.bottom - rcWnd.top);
hDCScr = GetDC(hFind);
hDCMem = CreateCompatibleDC(NULL);
hBmMem = CreateCompatibleBitmap(hDCScr, (rcWnd.right - rcWnd.left), (rcWnd.bottom - rcWnd.top));
hBmOld = SelectObject(hDCMem, hBmMem);
PrintWindow( hFind, hDCMem, 0);
BitBlt(hDCScr, rcWnd.left, rcWnd.top, wWidth, wHeight, hDCMem, 0, 0, SRCCOPY);
pBmInf = (PBITMAPINFO)VirtualAlloc(NULL, sizeof(BITMAPINFO), MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE);
if(hDCMem != NULL && hBmMem != NULL && pBmInf != NULL)
{
pBmInf->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
pBmInf->bmiHeader.biWidth = wWidth;
pBmInf->bmiHeader.biHeight = wHeight;
pBmInf->bmiHeader.biCompression = BI_RGB;
pBmInf->bmiHeader.biBitCount = 24;
pBmInf->bmiHeader.biClrUsed = 16777216;
pBmInf->bmiHeader.biPlanes = 1;
pBmInf->bmiHeader.biSizeImage = (wWidth + 7) / 8 * wHeight * 24;
pBmData = (PBYTE)VirtualAlloc(NULL, pBmInf->bmiHeader.biSizeImage, MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE);
if(pBmData != NULL)
{
if(GetDIBits(hDCMem, hBmMem, 0, wHeight, pBmData, pBmInf, DIB_RGB_COLORS))
{
BITMAPFILEHEADER BmFileHdr;
BmFileHdr.bfType = 0x4D42;
BmFileHdr.bfReserved1 = BmFileHdr.bfReserved2 = 0;
BmFileHdr.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
BmFileHdr.bfSize = BmFileHdr.bfOffBits + pBmInf->bmiHeader.biSizeImage;
hFile = CreateFile(sFilePath, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, NULL);
if(hFile != INVALID_HANDLE_VALUE)
{
DWORD dwBytes = 0;
WriteFile(hFile, &BmFileHdr, sizeof(BITMAPFILEHEADER), &dwBytes, NULL);
WriteFile(hFile, pBmInf, sizeof(BITMAPINFOHEADER), &dwBytes, NULL);
WriteFile(hFile, pBmData, pBmInf->bmiHeader.biSizeImage, &dwBytes, NULL);
FlushFileBuffers(hFile);
CloseHandle(hFile);
}
else
nResult = -5;
}
else
nResult = -6;
if (pBmData != NULL)
VirtualFree(pBmData, 0, MEM_RELEASE);
}
else
nResult = -7;
}
else
nResult = -8;
if(pBmInf != NULL)
VirtualFree(pBmInf, 0, MEM_RELEASE);
SelectObject(hDCMem, hBmOld);
DeleteDC(hDCMem);
DeleteObject(hBmMem);
return nResult;
Пожалуйста подскажите, почему так.