Perché la funzione Win32 OleGetClipboard () restituisce CLIPBRD_E_CANT_OPEN?
Domanda
In quali circostanze la funzione API Win32 OleGetClipboard () fallirà e restituirà CLIPBRD_E_CANT_OPEN
?
Ulteriori informazioni: sto assistendo con una correzione di bug di Firefox. Dettagli qui:
bug 444800 - impossibile recuperare i dati delle immagini dagli Appunti in formato lossless
Nel test automatizzato che ho aiutato a scrivere, vediamo che OleGetClipboard () a volte fallisce e restituisce CLIPBRD_E_CANT_OPEN
. Ciò è inaspettato e il codice di Firefox per estrarre i dati delle immagini dagli Appunti di Windows dipende dalla riuscita della chiamata.
Soluzione
La documentazione dice che OleGetClipboard
può fallire con questo codice di errore se OpenClipboard
fallisce. A sua volta, se leggi quella documentazione, dice:
" OpenClipboard fallisce se un'altra finestra ha gli appunti aperti. "
È una risorsa esclusiva: solo una finestra può aprire gli Appunti alla volta. Fondamentalmente, se non puoi farlo, aspetta un po 'e riprova.
Altri suggerimenti
Il test è in esecuzione su Servizi terminal? Vedi errore CLIPBRD_E_CANT_OPEN durante l'impostazione degli Appunti da .NET .
Da quello che vedo in MSDN sembra implicare che il problema provenga da chiunque abbia provato a mettere effettivamente i dati negli negli appunti, io, .e. la fonte dei dati. Se la loro chiamata a OleSetClipboard () non è riuscita, per qualsiasi motivo, non sarai in grado di estrarre roba. Vorrei dare un'occhiata al modo in cui i dati vengono inseriti negli Appunti e vedere se esiste un caso di test che lo esegue (copiando i dati negli Appunti), e quindi causa il problema di cui stai parlando.