Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

770
Vistas
PrintWindow() no pudo imprimir la ventana de Google Chrome (Chrome_WidgetWin_1)

Estoy usando Microsoft Visual Studio 2010 y Windows 7 Professional. Este es mi código para copiar la imagen de la ventana al portapapeles:

 void PrintWindowEx( HWND hWnd ) { HDC hDCMem = CreateCompatibleDC(NULL); RECT rect; GetWindowRect(hWnd, &rect); HBITMAP hBmp = NULL; HDC hDC = GetDC(hWnd); hBmp = CreateCompatibleBitmap(hDC, rect.right - rect.left, rect.bottom - rect.top); HGDIOBJ hOld = SelectObject(hDCMem, hBmp); PrintWindow(hWnd, hDCMem, 0); SelectObject(hDCMem, hOld); DeleteObject(hDCMem); OpenClipboard(hWnd); EmptyClipboard(); SetClipboardData(CF_BITMAP, hBmp); CloseClipboard(); ReleaseDC(hWnd, hDC); }

Funciona bien con todas las ventanas excepto la ventana principal de Google Chrome. Pensé que era porque Chrome usa la representación directa, así que deshabilité la aceleración de hardware en chrome://settings . Todavía no funciona. Luego me di cuenta de que trabajar con mensajes puede estar limitado debido a las restricciones en Chrome Sandbox, así que inicié Chrome con la opción de línea de comando --no-sandbox . Todavía no funciona.

¿Cómo puedo hacer que esto funcione? Para Chrome y cualquier otra ventana como Chrome. BitBlt() no es aceptable porque algunas partes de la ventana pueden estar superpuestas por otra ventana, la ventana puede estar en otro escritorio, etc. ¿Hay alguna solución que funcione? Tal vez con la carga de DLL en otro proceso o algo así.

UPD : se vuelve a dibujar después de RedrawWindow() ; para que pueda tomar una captura de pantalla (algunas partes: la parte izquierda (ancho ~ 20 px) y la parte derecha no se copian). Entonces, ¿es compatible con WM_PRINT o no? ¿Cómo puedo tomar una captura de pantalla completa de la ventana?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Estuve atascado durante mucho tiempo en esto, luego descubrí que puedo pasar un parámetro de PW_RENDERFULLCONTENT como último parámetro a PrintWindow. Buscar en Google que muestra que es nuevo en Windows 8.1, por lo que presumiblemente no funciona en 7. Sin embargo, puede valer la pena intentarlo, Winuser.h lo define como

 #if(_WIN32_WINNT >= 0x0603) #define PW_RENDERFULLCONTENT 0x00000002 #endif /* _WIN32_WINNT >= 0x0603 */
over 4 years ago · Santiago Trujillo Denunciar

0

PrintWindow funciona enviando un WM_PRINT o WM_PRINTCLIENT a la ventana de destino. Mientras que DefWindowProc maneja WM_PRINT para clases de ventana estándar, las clases de ventana personalizadas deben manejar WM_PRINT para que PrintWindow produzca el resultado deseado. Si Chrome no maneja WM_PRINT o WM_PRINTCLIENT , no hay nada que puedas hacer.

Cuando se dirige a Windows Vista y superior, puede usar la API de miniaturas de DWM para obligar a una ventana a mostrar su contenido en una ventana de destino proporcionada por el cliente.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda