J'essaie d'obtenir des vignettes de fenêtres qui ne sont pas visibles.Get Thumbnail of fenêtre d'arrière-plan
Voici le code que j'ai jusqu'à présent
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;
}
Pour l'instant, WindowProc
est appelé directement à l'aide FindWindow
pour obtenir une poignée, cependant, je veux éventuellement utiliser EnumWindows
pour boucler à travers toutes les fenêtres pour obtenir leurs vignettes et les stocker dans une liste liée.
WindowProc(FindWindow(NULL, L"File Explorer"), 0);
Ce code se trouve dans une DLL, appelée à partir d'une application C# Forms. Pour l'instant l'application C# prend juste le bitmap et l'enregistre dans un fichier. Le problème est que, à moins que j'utilise FindWindow
pour obtenir la fenêtre visible (qui est aussi l'application C#), l'image finit par être une boîte noire.
Est-il possible d'obtenir une image d'une fenêtre d'arrière-plan?
EDIT: Ceci est une application Windows Mobile
Avez-vous essayé d'appeler InvalidateRect() dans votre code pour forcer la fenêtre d'arrière-plan à se repeindre? – Kluge
J'ai essayé d'appeler InvalidateRect avant d'obtenir le DC pour la fenêtre, et avant BitBlt. J'ai également essayé d'envoyer un message WM_PAINT, mais cela n'a pas non plus fait l'affaire. – zort15