¿Por qué la función OleGetClipboard () de Win32 devolvería CLIPBRD_E_CANT_OPEN?
Pregunta
¿En qué circunstancias fallará la función de API Win32 OleGetClipboard () y devolverá CLIPBRD_E_CANT_OPEN
?
Más antecedentes: estoy ayudando con una corrección de errores de Firefox. Detalles aquí:
error 444800 - no se pueden recuperar datos de imágenes del portapapeles en formato sin pérdidas
En la prueba automatizada que ayudé a escribir, vemos que OleGetClipboard () a veces falla y devuelve CLIPBRD_E_CANT_OPEN
. Eso es inesperado, y el código de Firefox para extraer los datos de la imagen del portapapeles de Windows depende de que la llamada se realice correctamente.
Solución
La documentación dice que OleGetClipboard
puede fallar con este código de error si OpenClipboard
falla. A su vez, si lees esa documentación, dice:
" OpenClipboard falla si otra ventana tiene el portapapeles abierto. "
Es un recurso exclusivo: solo una ventana puede tener el portapapeles abierto a la vez. Básicamente, si no puedes hacerlo, espera un poco y vuelve a intentarlo.
Otros consejos
¿Su prueba se ejecuta en Terminal Services? Vea el error
Por lo que veo en MSDN, parece implicar que el problema se origina con quien intentó poner los datos en en el portapapeles, i, .e. La fuente de los datos. Si su llamada a OleSetClipboard () falló, por cualquier razón, no podrá extraer cosas. Echaría un vistazo a cómo se están colocando los datos en el portapapeles, y veré si hay un caso de prueba que realice esto (copiando los datos en el portapapeles), y luego cause el problema del que está hablando.