Windows 11: Microsoft пояснила, чому Ctrl+C може не працювати через особливості дизайну

Реймонд Чен пояснює, чому Ctrl+C іноді не реєструється, і чому Microsoft розробила його саме так.
Реймонд Чен пояснює, чому Ctrl+C іноді не реєструється, і чому Microsoft розробила його саме так. Джерело: Windows Latest

Натискання Ctrl+C один раз, і воно не копіює нічого, — це не уявна помилка. Служба історії буфера обміну Microsoft відстежує зміни асинхронно, що означає, що друге копіювання може статися до того, як система завершить логування першого. Компанія називає цей вибір дизайну навмисним.

Як і більшість із вас, я маю звичку натискати Ctrl і C кілька разів, щоб переконатися, що щось скопійовано, і ця звичка не зникає навіть у Windows 11. Одного разу натиснути має бути достатньо, але це не завжди працює, і довгий час я думав, що це просто моя параноя. Виявляється, багато людей мають такий самий рефлекс.

Ctrl+C у Windows 11
Ctrl+C у Windows 11. Джерело: Windows Latest

Мем із PC Master Race на X, який висміював людей, що багаторазово натискають Ctrl+C перед вставкою, став вірусним вчора. Генеральний директор Epic Games Тім Свіні відповів, позначивши Павана Давулурі з Microsoft: «Ніхто не розуміє, чому натискання control-c один раз не завжди працює, і це дратує 99,99% усіх користувачів Windows».

Мем Ctrl + C у Windows
Мем Ctrl + C у Windows. Зображення: скріншот Windows Latest

Давулурі на момент написання відповіді не надав. Однак ми виявили, що Реймонд Чен із Microsoft, старший інженер-програміст, який працює над Windows понад три десятиліття і веде блог Old New Thing, вже відповів на це запитання, що робить цю інформацію максимально офіційною.

Чому історія буфера обміну Windows пропускає швидкі натискання Ctrl+C

У дописі від травня 2025 року Чен описав приклад програми, яка послідовно копіює три окремі рядки до буфера обміну, маючи на меті завантажити всі три в Історію буфера обміну для швидкого доступу пізніше. Але в результаті до історії потрапляє лише останній рядок.

Буфер обміну Windows 11
Буфер обміну Windows 11. Зображення: Microsoft

Служба історії буфера обміну відстежує зміни за допомогою функції Windows під назвою AddClipboardFormatListener, яка повідомляє програму лише після того, як буфер обміну вже змінився. Чен пояснив, що це сповіщення надходить асинхронно, тому до моменту, коли служба історії дізнається про перше копіювання, буфер обміну міг уже змінитися вдруге або втретє. Служба зрештою записує лише те, що є в буфері обміну на момент перевірки, а не все, що через нього пройшло.

Старіша система перегляду буфера обміну працювала інакше, оскільки вона отримувала сповіщення в момент зміни буфера обміну. Чен зазначив, що синхронне сповіщення має свою ціну. Програма, яка працює некоректно під час отримання оновлення буфера обміну, може «заморозити» або сповільнити роботу буфера обміну для всіх інших програм. Асинхронне сповіщення не має цієї проблеми, але ціною є пропуск швидких проміжних натискань Ctrl+C.

Чен назвав це функцією, а не недоліком. За його словами, пропуск кожної дрібної зміни буфера обміну — це «певною мірою функція служби історії буфера обміну», оскільки вміст, який залишається в буфері обміну лише частку секунди, не залишається надовго, щоб людина могла його вставити. З точки зору того, хто використовує Ctrl+V, важливим є лише кінцеве значення, тому служба просто відображає те, що людина побачила б у буфері обміну.

Історія буфера обміну у Windows 11
Історія буфера обміну у Windows 11. Джерело: Windows Latest

Блог Чена часто отримує коментарі, але під цим поясненням були заперечення: один користувач назвав саму ідею попереднього завантаження буфера обміну «жахливою», оскільки це використовує буфер обміну не для ручного копіювання та вставки.

Чен захистив свою думку реальним прикладом: офіс лікаря переносить дані пацієнтів із системи направлення до окремої системи планування, де написання невеликого інструменту для чергування кількох полів для вставки перевершує ручне клацання по тих самих полях двадцять разів.

Microsoft пояснила, як розробники можуть обійти асинхронну затримку

У наступному дописі наступного дня Чен показав, як програма може чекати на реєстрацію кожної зміни буфера обміну перед виконанням наступної. Цей трюк залежить від події Clipboard.HistoryChanged з API буфера обміну WinRT, яка спрацьовує щоразу, коли служба історії завершує обробку зміни.

Зразок коду налаштовує чергу диспетчера для роботи як UI-потік, оскільки API буфера обміну WinRT цього вимагають, а потім створює об’єкт події Windows, який сигналізується щоразу, коли спрацьовує HistoryChanged. Після запису кожного рядка до буфера обміну програма чекає на цей сигнал перед записом наступного, гарантуючи, що служба історії наздогнала, перш ніж рухатися далі. Чен згадав це лише як начерк повного рішення, оскільки користувач, який вручну очищає історію під час виконання, залишить програму в очікуванні події, яка не відбудеться.

Ця асинхронна передача, як не дивно, є механізмом, який дозволяє головному технічному директору Microsoft Azure Марку Руссиновичу запускати DOOM у MS Paint, вставляючи один відрендерений кадр гри за іншим через буфер обміну достатньо швидко, щоб це виглядало як справжня гра. Руссинович сказав, що рання версія цього проєкту зіткнулася з тією ж умовою гонитви, яку описав Чен, коли нові кадри перезаписували старі до того, як Paint встигав їх прочитати.

Історія буфера обміну Windows 11 має й інші особливості

Історією буфера обміну я користуюся щодня. Після Ctrl+C я натискаю Win+V, щоб перевірити, який елемент мені потрібен перед вставкою, оскільки до того часу там зазвичай буває більше одного елемента.

Проблема швидкого копіювання — не єдина причина, чому історія буфера обміну може здаватися ненадійною. Windows Latest повідомляла, що деякі програми використовують відкладене відтворення, коли програма повідомляє Windows, що вона може надати дані буфера обміну, але не передає їх негайно, і Windows чекає до 30 секунд, поки ці дані з’являться. Якщо ви копіюєте велику таблицю Rich Text із Excel, програма може просто пропустити це вікно, залишивши Історію буфера обміну порожньою або показуючи старий вміст.

Порожня історія буфера обміну Windows
Порожня історія буфера обміну Windows. Джерело: Windows Latest

Звісно, ці проблеми не пов’язані з тим, що це Windows 11, як вважає Інтернет. У дописі Чена 2011 року (за десятиліття до Windows 11) стара ланцюжок перегляду буфера обміну називалася крихкою за дизайном, оскільки одна програма, що працює некоректно в ланцюжку, могла порушити сповіщення для всіх інших програм, які перевіряють буфер обміну, або навіть створити нескінченний цикл.

Тоді Чен рекомендував AddClipboardFormatListener як виправлення, а також менш відомий варіант під назвою номер послідовності буфера обміну — лічильник, який Windows збільшує щоразу, коли буфер обміну змінюється, і який програми можуть опитувати замість очікування сповіщення.

З огляду на це, Паван Давулурі не з тих, хто уникає відповідей, і враховуючи, що Windows 11 виправлятимуть у 2026 році, навіть такі дрібниці, як новий індикатор покажчика миші, можливо, ми отримаємо виправлення для частої проблеми з Ctrl+C. Але навіть якщо це станеться, я майже впевнений, що моя 20-річна звичка натискати Ctrl+C+C+C+C+C не зникне найближчим часом.

Як ви працюєте з копіюванням та вставкою у Windows 11?

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *