En fait je viens de tomber sur le même problème. Contrairement à ce que tu dis, on peut obtenir une capture d'écran d'une fenêtre cachée.
racpp (et oui, toujours lui !) explique comment faire
ici. Je me demande comment il connaît tout ça !
Pour info, mon code est :
HWND hWnd = FindWindow(NULL, "Titre Fenetre");
HDC hWndDC = GetWindowDC(hWnd);
HDC hdcMemDC = CreateCompatibleDC(hWndDC);
RECT rcClient;
GetClientRect(hWnd, &rcClient); // GetWindowRect pour avoir la decoration
SetStretchBltMode(hWndDC,HALFTONE);
HBITMAP hBitmap = CreateCompatibleBitmap(hWndDC, rcClient.right-rcClient.left, rcClient.bottom-rcClient.top);
SelectObject(hdcMemDC, hBitmap);
PrintWindow(hWnd,hdcMemDC,0);
CreateBMPFile(hWnd, "c:\\captureqwsx.bmp", hBitmap, hdcMemDC);
où CreateBMPFile est une fonction inspirée de codes d'exemples MSDN.
A bientôt