Re: Корректный захват скриншота?
От: niko_ Россия www.KGBSpy.ru
Дата: 21.02.08 15:34
Оценка: +1
Здравствуйте, creatman, Вы писали:

C>Подскажите, как можно программно получить снимок экрана эквивалентный тому, который получается при нажатии клавиши Print Screen. Попробывал делать через GetDesktopWindow. Но обнаружил следующее: некоторые окна програм написанных под .NET не снимаются (отсутствуют в снимке экрана), а если делать через Print Screen они отображены на скриншоте. Какие есть еще способы получить снимок экрана, чтобы захвачено было все?



Вот хороший кусочек кода (из MSDN'а):

// Create a normal DC and a memory DC for the entire screen. The 
// normal DC provides a "snapshot" of the screen contents. The 
// memory DC keeps a copy of this "snapshot" in the associated 
// bitmap. 
 
hdcScreen = CreateDC("DISPLAY", NULL, NULL, NULL); 
hdcCompatible = CreateCompatibleDC(hdcScreen); 
 
// Create a compatible bitmap for hdcScreen. 
 
hbmScreen = CreateCompatibleBitmap(hdcScreen, 
                     GetDeviceCaps(hdcScreen, HORZRES), 
                     GetDeviceCaps(hdcScreen, VERTRES)); 
 
if (hbmScreen == 0) 
    errhandler("hbmScreen", hwnd); 
 
// Select the bitmaps into the compatible DC. 
 
if (!SelectObject(hdcCompatible, hbmScreen)) 
    errhandler("Compatible Bitmap Selection", hwnd); 
 
        // Hide the application window. 
 
        ShowWindow(hwnd, SW_HIDE); 
 
         //Copy color data for the entire display into a 
         //bitmap that is selected into a compatible DC. 
 
        if (!BitBlt(hdcCompatible, 
               0,0, 
               bmp.bmWidth, bmp.bmHeight, 
               hdcScreen, 
               0,0, 
               SRCCOPY)) 
 
        errhandler("Screen to Compat Blt Failed", hwnd); 
 
        // Redraw the application window. 
 
        ShowWindow(hwnd, SW_SHOW);
The truth is out there
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.