Ich versuche, Thumbnail-Bilder von Fenstern, die nicht sichtbar sind, zu erhalten.Get Thumbnail des Hintergrundfensters
Hier ist der Code, den ich
BOOL CALLBACK WindowProc(HWND hWnd, LPARAM lParam)
{
RECT WindRect;
GetWindowRect(hWnd, &WindRect)
CurrentScreenShot->Next = new ScreenShotList();
CurrentScreenShot = CurrentScreenShot->Next;
HDC SourceDC = GetDC(hWnd);
HDC TargetDC = CreateCompatibleDC(SourceDC);
CurrentScreenShot->ScreenShot = CreateCompatibleBitmap(SourceDC, WindRect.right - WindRect.left, WindRect.bottom - WindRect.top);
BitBlt(TargetDC, 0, 0, WindRect.right - WindRect.left, WindRect.bottom - WindRect.top, SourceDC, 0, 0, SRCCOPY);
ReleaseDC(hWnd, SourceDC);
g_iWindows++;
return TRUE;
}
Vorerst bisher haben, WindowProc
direkt FindWindow
durch, die aufgerufen ist, einen Griff zu bekommen, ich EnumWindows
eine Schleife durch alle Fenster aber schließlich verwenden möchten zu erhalten ihre Miniaturansichten und speichern Sie sie in einer verknüpften Liste.
WindowProc(FindWindow(NULL, L"File Explorer"), 0);
Dieser Code ist in einer DLL, die aus einer C# Forms-Anwendung aufgerufen wird. Jetzt nimmt die C# -Anwendung nur die Bitmap und speichert sie in einer Datei.
Das Problem ist, dass, wenn ich FindWindow
nicht verwenden, um das sichtbare Fenster zu erhalten (was auch zufällig die C# -Anwendung ist), das Bild endet, eine Blackbox zu sein.
Ist es möglich, ein Bild eines Hintergrundfensters zu erhalten?
EDIT: Dies ist ein Windows Mobile-Anwendung
Haben Sie versucht, InvalidateRect() in Ihrem Code aufzurufen, um das Hintergrundfenster zu zwingen, sich neu zu streichen? – Kluge
Ich habe versucht, InvalidateRect vor dem Abrufen der DC für das Fenster und vor BitBlt. Ich habe auch versucht, eine WM_PAINT-Nachricht zu senden, aber das hat auch nicht den Trick gemacht. – zort15