Почему, по мнению Microsoft, буфер обмена в Windows 11 иногда работает с перебоями…
Вы не одиноки, если заметили, что история буфера обмена в Windows 11 иногда не сохраняет скопированные данные. Это происходит не всегда, но вы можете столкнуться с проблемой, если копируете слишком много данных подряд или используете такие приложения, как Excel, с большими объёмами данных.
Для тех, кто не знает, Windows 11 поставляется с полноценной историей буфера обмена, и к ней можно получить доступ с помощью сочетания клавиш Win + V. Вы можете управлять синхронизацией буфера обмена в Настройках > Системе > Буфере обмена и даже включить синхронизацию на своих устройствах, включая телефоны Android.
Я всегда использую функцию истории буфера обмена Windows, потому что она мощная и в большинстве случаев справляется со своей задачей. Когда я использую приложение Phone Link для быстрого копирования изображений с моего телефона Android в буфер обмена, я могу легко извлечь их из истории буфера обмена и отредактировать в MS Paint.
Это работает, пока вы не столкнётесь с препятствием. Я заметил, что иногда в истории буфера обмена не отображается то, что я скопировал ранее. И я задаюсь вопросом: действительно ли я скопировал изображение?
Я наблюдал подобное поведение при работе в Excel.
Оказывается, это можно объяснить тем, как работает служба истории буфера обмена Windows и как некоторые приложения предоставляют данные буфера обмена.
Я нашёл несколько документов Microsoft и даже патентов, которые помогают объяснить, почему работа с буфером обмена может быть непредсказуемой.
Почему история буфера обмена в Windows 11 не всегда сохраняет всё?
Прежде всего, если вы очень быстро меняете данные в буфере обмена, история буфера обмена может не сохранить все элементы. Это происходит потому, что Windows асинхронно прослушивает уведомления об изменении буфера обмена.
Что такое асинхронность?
Асинхронность означает, что что-то происходит в фоновом режиме, а ваш код продолжает работать, не дожидаясь завершения процесса.
«Служба истории буфера обмена работает асинхронно. Она регистрируется для отслеживания изменений в буфере обмена с помощью AddClipboardFormatListener и при получении уведомления об изменении обновляет историю буфера обмена, — объяснил Рэймонд Чен, ведущий инженер Microsoft. — Однако слушатель получает уведомление асинхронно, поэтому к тому времени, когда слушатель получит сообщение WM_CLIPBOARDUPDATE, буфер обмена может измениться во второй раз».
Если вы всё ещё не понимаете, почему асинхронность вызывает проблемы с историей буфера обмена, выслушайте меня.
Если вы что-то копируете, Windows отправляет сигнал о том, что буфер обмена изменился, но если буфер обмена изменится ещё раз до того, как служба истории обработает предыдущее изменение, предыдущий элемент может не сохраниться в истории.
Например, если вы скопировали изображение из приложения Phone Link или другого приложения, а затем сразу же скопировали ячейку из Excel и открыли историю буфера обмена (Windows + V), вы можете даже не увидеть изображение.
Служба истории буфера обмена — это отдельный процесс, и хотя он пытается записывать изменения в буфере обмена, он может пропускать очень быстрые последовательные обновления. Это сделано в основном для повышения производительности, и если что-то остаётся в буфере обмена всего на долю секунды, вы (как человек) всё равно не сможете это вставить.
Я что-то скопировал, но это не было сохранено в буфере обмена Windows 11. Почему?
Я сам столкнулся с этой проблемой. Я снова использую приложение Phone Link и скопировал изображение, но оно не было сохранено. Я делаю это снова, но изображение по-прежнему не сохраняется. Такое иногда случается, когда Word загружает содержимое документа, а я пытаюсь скопировать отрывок. Он не сохраняется.
В Windows 11 некоторые приложения не сразу помещают окончательные данные в буфер обмена. Вместо этого они используют отложенный рендеринг, при котором приложение обещает предоставить данные, а затем Windows ждёт (до 30 секунд), пока приложение сгенерирует эти данные по запросу.
Это не проблема, если только приложение не зависло, не перегружено или не отвечает должным образом. В этом случае вы можете остаться ни с чем (или с отсутствующими форматами).
Например, если вы откроете Excel и скопируете большой объем данных, особенно из таблицы с форматированным текстом. Excel потребуется около 30 секунд или больше, чтобы скопировать форматированные данные в буфер обмена, но этого не происходит, и в буфере обмена Windows ничего не отображается. Он пуст или содержит устаревшие данные, как показано на скриншоте ниже:
30-секундный тайм-аут не является проблемой, если только приложение не зависло, не перегружено или не отвечает должным образом.
В приведённом выше примере с Excel данные не были скопированы в буфер обмена Windows 11, потому что Excel работал более 30 секунд и функция GetClipboardData не успела сработать.
В большинстве случаев буфер обмена Windows работает отлично. А у вас? Сталкивались ли вы с подобными проблемами в работе буфера обмена Windows? Напишите в комментариях ниже.
Источник: https://www.windowslatest.com
