Почему функция Win32 OleGetClipboard() возвращает CLIPBRD_E_CANT_OPEN?

StackOverflow https://stackoverflow.com/questions/139668

  •  02-07-2019
  •  | 
  •  

Вопрос

При каких обстоятельствах функция 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() не удался по какой-либо причине, вы не сможете извлечь что-либо.Я бы посмотрел, как данные помещаются в буфер обмена, и посмотрел, есть ли тестовый пример, который выполняет это (копирование данных в буфер обмена), а затем вызывает проблему, о которой вы говорите.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top