Почему функция Win32 OleGetClipboard() возвращает CLIPBRD_E_CANT_OPEN?
Вопрос
При каких обстоятельствах функция API Win32 OleGetClipboard() выйдет из строя и вернет результат? CLIPBRD_E_CANT_OPEN
?
Дополнительная информация:Я помогаю исправить ошибку Firefox.Подробности здесь:
ошибка 444800 — невозможно получить данные изображения из буфера обмена в формате без потерь.
В автоматизированном тесте, который я помогал писать, мы видим, что OleGetClipboard() иногда терпит неудачу и возвращает результат. CLIPBRD_E_CANT_OPEN
.Это неожиданно, и код Firefox для извлечения данных изображения из буфера обмена Windows зависит от успеха этого вызова.
Решение
В документации сказано, что OleGetClipboard
может выйти из строя с этим кодом ошибки, если OpenClipboard
терпит неудачу.В свою очередь, если вы прочитаете эту документацию, там написано:
"Открыть буфер обмена сбой, если в другом окне открыт буфер обмена».
Это эксклюзивный ресурс:Буфер обмена может быть открыт только в одном окне одновременно.По сути, если вы не можете этого сделать, подождите немного и попробуйте еще раз.
Другие советы
Ваш тест выполняется через службы терминалов?Видеть Ошибка CLIPBRD_E_CANT_OPEN при настройке буфера обмена из .NET.
Из того, что я вижу в MSDN, похоже, следует, что проблема возникает у того, кто действительно пытался поместить данные в буфер обмена, т.е.источник данных.Если их вызов OleSetClipboard() не удался по какой-либо причине, вы не сможете извлечь что-либо.Я бы посмотрел, как данные помещаются в буфер обмена, и посмотрел, есть ли тестовый пример, который выполняет это (копирование данных в буфер обмена), а затем вызывает проблему, о которой вы говорите.