una toshiba pantalla las laptop hacer guardan donde computadora como celular capturas captura java winapi bitmap capture

java - toshiba - Obtener una captura de pantalla de menú de inicio



como hacer una captura de pantalla en el celular (1)

use DC de escritorio y corte a ventana

RECT rc, rc2; GetClientRect(hWnd, &rc); GetWindowRect(hWnd, &rc2); int width = rc2.right - rc2.left; int height = rc2.bottom - rc2.top; HDC hdcScreen = GetDC(NULL); //!!!! Get desktop DC HDC hBmpFileDC = CreateCompatibleDC(hdcScreen); HBITMAP hBmpFileBitmap = CreateCompatibleBitmap(hdcScreen, width, height); HBITMAP hOldBitmap = (HBITMAP)SelectObject(hBmpFileDC, hBmpFileBitmap); BitBlt(hBmpFileDC, 0, 0, width, height, hdcScreen, rc2.left, rc2.top, SRCCOPY | CAPTUREBLT); HGDIOBJ prev = SelectObject(hBmpFileDC, hOldBitmap); SaveBitmap(szLogFilename, hBmpFileBitmap); DeleteDC(hBmpFileDC); DeleteObject(hBmpFileBitmap);

otra variante

RECT rc; GetClientRect(hWnd, &rc); int width = rc.right - rc.left; int height = rc.bottom - rc.top; HDC hdcScreen = GetDC(hWnd); //////////////////////////// PrintWindow(hWnd, hdcScreen, 0); PrintWindow(hWnd, hdcScreen, PW_CLIENTONLY); //////////////////////////// HDC hBmpFileDC = CreateCompatibleDC(hdcScreen); HBITMAP hBmpFileBitmap = CreateCompatibleBitmap(hdcScreen, width, height); HBITMAP hOldBitmap = (HBITMAP)SelectObject(hBmpFileDC, hBmpFileBitmap); BitBlt(hBmpFileDC, 0, 0, width, height, hdcScreen, 0, 0, SRCCOPY | CAPTUREBLT); HGDIOBJ prev = SelectObject(hBmpFileDC, hOldBitmap); SaveBitmap(szLogFilename, hBmpFileBitmap); DeleteDC(hBmpFileDC); DeleteObject(hBmpFileBitmap);

antes de llamar a cualquier método de captura, llamo PrintWindow. Actúa ventana para redibujarse. Y como resultado, la captura de pantalla tendrá una imagen correcta. El resultado más estable que obtuve con la doble invocación de PrintWindow.

Estoy usando bitblt para capturar una ventana. Si el tema aerodinámico está habilitado, el fondo de la imagen capturada es negro. Si desactivo el DWM y capturo la ventana, la imagen capturada es muy buena.

Aquí está parte de mi código.

HDC hdcMemDC = GDI32.INSTANCE.CreateCompatibleDC(desktopDC); HDC windowDC = User32.INSTANCE.GetDC(window); HWND window= User32Extra.INSTANCE.FindWindow(null, "Start menu"); GDI32Extra.INSTANCE.BitBlt(hdcMemDC, 0, 0, width, height, desktopDC, 0, 0, WinGDIExtra.SRCCOPY ); GDI32Extra.INSTANCE.BitBlt(hdcMemDC,windowBounds.left, windowBounds.top, windowWidth, windowHeight, windowDC, windowBounds.left+windowBounds1.right-windowBounds.right+(windowExtraGap/2), windowBounds.top+windowBounds1.bottom-windowBounds.bottom+(windowExtraGap/2), WinGDIExtra.SRCCOPY);

Cómo capturar el menú de inicio con el fondo adecuado?

¿Hay algún otro método para obtener la imagen correcta de Aero Window?