Sujet : Programé une capture d'ecran sous windows |
Trap D |
big_dadi_fat a écrit :
merci à tous c'est vraiment trés gentil de votre part, ca commence à s'eclercire pour moi :)
|
A partir du code de Carbon_14 on peut faire comme çà :
Code :
- ((CStatic *)GetDlgItem(IDC_STATIC1))->GetWindowRect(&rc);
- ::GetWindowRect(::GetDesktopWindow(), &rc1);
- srcDC = ::CreateDC("DISPLAY", "", "", NULL);
- trgDC = ::CreateCompatibleDC(srcDC);
- BMPHandle = ::CreateCompatibleBitmap(srcDC, rc1.right, rc1.left);
- ::SelectObject(trgDC, BMPHandle);
- ::BitBlt (trgDC, 0, 0, rc.right-rc.left, rc.bottom-rc.top, srcDC, 0, 0, SRCCOPY);
- ::DeleteDC(trgDC);
- ::ReleaseDC((HWND) BMPHandle, srcDC);
- ((CStatic *)GetDlgItem(IDC_STATIC1))->SetBitmap(BMPHandle);
|
Les puristes pourront me reprocher le mélange MFC/Win32 :cry: |
Trap D |
big_dadi_fat a écrit :
merci à tous c'est vraiment trés gentil de votre part, ca commence à s'eclercire pour moi :)
|
A partir du code de Carbon_14 on peut faire comme çà :
Code :
- ((CStatic *)GetDlgItem(IDC_STATIC1))->GetWindowRect(&rc);
- ::GetWindowRect(::GetDesktopWindow(), &rc1);
- srcDC = ::CreateDC("DISPLAY", "", "", NULL);
- trgDC = ::CreateCompatibleDC(srcDC);
- BMPHandle = ::CreateCompatibleBitmap(srcDC, rc1.right, rc1.left);
- ::SelectObject(trgDC, BMPHandle);
- ::BitBlt (trgDC, 0, 0, rc.right-rc.left, rc.bottom-rc.top, srcDC, 0, 0, SRCCOPY);
- ::DeleteDC(trgDC);
- ::ReleaseDC((HWND) BMPHandle, srcDC);
- ((CStatic *)GetDlgItem(IDC_STATIC1))->SetBitmap(BMPHandle);
|
Les puristes pourront me reprocher le mélange MFC/Win32 :cry: |
Carbon_14 |
Faudrait que je vérifie si ça marche bien, mais j'ai retrouvé ça dans mes "oubliettes"
void CaptureScreen(HWND hWndMain, long Left, long Top, long Width, long Height)
{
HDC srcDC;
HDC trgDC;
HBITMAP BMPHandle;
DEVMODE *dm;
srcDC = CreateDC("DISPLAY", "", "", &dm);
trgDC = CreateCompatibleDC(srcDC);
BMPHandle = CreateCompatibleBitmap(srcDC, Width, Height);
SelectObject(trgDC, BMPHandle);
BitBlt(trgDC, 0, 0, Width, Height, srcDC, Left, Top, SRCCOPY);
OpenClipboard(hWndMain);
EmptyClipboard();
SetClipboardData(CF_BITMAP, BMPHandle);
CloseClipboard();
DeleteDC(trgDC);
ReleaseDC(BMPHandle, srcDC);
}
Les dimensions de la fenêtre principale, on peut les avoir avec GetWindowRect()
Le hWnd "main" se retrouve par hWndMain = GetDesktopWindow(); J'ai du code (16 bits) pour exporter ce qui est dans le presse-papiers en CLP, ou BMP. faut que je pense à regarder ça ce soir, si ça peut rendre service.
En VB(3), y a http://forum.hardware.fr/hardwaref [...] formulaire mais il n'exporte pas. |