2009-08-14 4 views
5

Ich mache die Screenshots von IE mit PrintWindow. Das Problem ist, dass ich manchmal Bilder mit schwarzen Bereichen bekomme. Es kann ein ganzer HTML-Inhalt sein, was schwarz ist, manchmal sind nur bestimmte Bereiche schwarz.Schwarze Bilder beim Erstellen von Screenshots mit PrintWindow

Der Inhalt des IE wird NICHT zwischen den Aufnahmen geändert.

Was ist seltsam ist, dass auf einigen Computern bekomme ich schwarze Bilder sehr oft, auf einigen bekomme ich sie nie.

Ich habe mit Fx getestet, und hatte gleiche schwarze Bilder.

HBITMAP ShootWindow(HWND hWnd) 
{ 
    RECT rect = {0}; 

    GetWindowRect(hWnd, & rect); 

    HDC hDC = GetDC(hWnd); 
    if(hDC == NULL) 
     throw "GetDC failed."; 

    HDC hTargetDC = CreateCompatibleDC(hDC); 
    if(hTargetDC == NULL) 
     throw "CreateCompatibleDC failed."; 

    HBITMAP hBitmap = CreateCompatibleBitmap(hDC, rect.right - rect.left, rect.bottom - rect.top); 
    if(hBitmap == NULL) 
     throw "CreateCompatibleBitmap failed."; 

    if(!SelectObject(hTargetDC, hBitmap)) 
     throw "SelectObject failed."; 

    if(!PrintWindow(hWnd, hTargetDC, 0)) 
     throw "PrintWindow failed."; 

    ReleaseDC(hWnd, hDC); 
    ReleaseDC(hWnd, hTargetDC); 

    return hBitmap; 
} 

Ich habe einige Links gefunden, aber sie geben keine Antwort:

http://www.vbforums.com/showthread.php?t=555250 http://www.codeguru.com/forum/archive/index.php/t-357211.html http://social.msdn.microsoft.com/forums/en-US/winforms/thread/3e3decd8-ced1-4f17-a745-466e5aa91391/

+0

Gibt es eine Korrelation zwischen schwarzen Bereichen und SWF/Flash auf der Seite? – Mark

+0

Nein. Ich habe schwarze Löcher mit einfachen www.google.com. – alex2k8

+0

Ich sehe das Problem auf Windows 2008. Während XP, Vista und Windows 7 scheint in Ordnung zu sein. – alex2k8

Antwort

2

Dies scheint üblich zu sein, wenn Screenshots von Anwendungen nehmen, die die verwenden GPU. BitBlt kann erfolgreich Pixel kopieren, bei denen PrintWindow fehlschlägt.

WINDOWINFO wi; 
GetWindowInfo(hWnd, &wi); 

BitBlt(hdc, 0, 0, rect.right - rect.left, rect.bottom - rect.top, hDC, wi.rcClient.left, wi.rcClient.top, SRCCOPY);