Pourquoi la fonction Win32 OleGetClipboard () renvoie-t-elle CLIPBRD_E_CANT_OPEN?
Question
Dans quelles circonstances la fonction API Win32 OleGetClipboard () échouera-t-elle et renverra CLIPBRD_E_CANT_OPEN
?
Plus d’arrière-plan: j’assiste à la résolution d’un bogue dans Firefox. Détails ici:
bug 444800 - impossible de récupérer les données d'image du presse-papiers au format sans perte
Dans le test automatisé que j'ai aidé à écrire, nous voyons qu'OleGetClipboard () échoue parfois et renvoie CLIPBRD_E_CANT_OPEN
. Cela est inattendu et le code Firefox pour extraire les données d’image du presse-papiers Windows dépend du succès de cet appel.
La solution
La documentation indique que OleGetClipboard
peut échouer avec ce code d'erreur si OpenClipboard
échoue. À son tour, si vous lisez cette documentation, vous remarquerez:
" OpenClipboard " échoue si le presse-papier est ouvert dans une autre fenêtre. "
Il s’agit d’une ressource exclusive: le Presse-papiers est ouvert à la fois dans une seule fenêtre. En gros, si vous ne pouvez pas le faire, attendez un peu et essayez à nouveau.
Autres conseils
Votre test est-il exécuté sur les services Terminal Server? Voir l'erreur CLIPBRD_E_CANT_OPEN lors de la définition du Presse-papiers à partir de .NET . <. / p>
D'après ce que je vois dans MSDN, cela semble impliquer que le problème provient de quiconque a essayé de placer les données dans le presse-papiers, i, .e. la source des données. Si leur appel à OleSetClipboard () a échoué, pour une raison quelconque, vous ne pourrez pas extraire de contenu. Je voudrais regarder comment les données sont placées dans le presse-papiers et voir si un scénario de test effectue cela (copier les données dans le presse-papiers), puis cause le problème dont vous parlez.