Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

776
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!