Недавно у меня появилась возможность выполнить отладку буфера обмена в Windows, и я решил, что хорошо бы поделиться информацией, которую удалось узнать. Буфер обмена — это тот компонент Windows, который многие из нас используют десятки (сотни?) раз в день, особо не размышляя об этом. Прежде чем взяться за это дело, я даже никогда не задумывался, как всё устроено.
Как выяснилось, там столько интересного, что вы даже не можете себе представить. Сначала опишу, как приложения хранят разные типы данных в буфере обмена и как извлекают их оттуда, а затем — как приложения могут «прицепиться» к буферу и отслеживать изменения в нём. В обоих случае вы увидите отладочные записи, которые показывают, как получить доступ к данным из отладчика.
Начнём с обсуждения форматов буфера обмена. Такие форматы используются для описания, какие типы данные можно поместить в буфер. Там есть некоторое количество предопределённых стандартных форматов, которые может использовать приложение, вроде битового массива, текста ANSI, текста в Юникоде и TIFF. Windows также позволяет приложению установить собственный формат.
Что такое буфер обмена на компьютере и как им пользоваться
Например, текстовый процессор может зарегистрировать формат, включающий в себя текст, форматирование и картинки. Конечно, это ведёт к определённой проблеме: что произойдёт, если вы скопируете данные из текстового редактора и вставите их в «Блокнот», который не понимает всего этого форматирования и не отображает картинки?
Выход — разрешить одновременное хранение данных в буфере обмена в нескольких форматах. Когда я раньше думал о буфере обмена, то представлял, что там хранится единственный объект («мой текст» или «моя картинка»), но на самом деле мои данные хранятся в буфере в разных формах. Программа, которая берёт информацию из буфера, получает её в том формате, который она может использовать.
Как же данные появляются в буфере обмена? Очень просто, приложение сначала объявляет о праве собственности на буфер обмена через функцию OpenClipboard. После этого программа может очистить буфер обмена командой EmptyClipboard и, наконец, поместить туда свои данные командой SetClipboardData. SetClipboardData принимает два параметра.
Первый — это идентификатор одного из форматов буфера обмена, которые мы упоминали выше. Второй — дескриптор сегмента в памяти, который содержит данные в этом формате. Приложение может неоднократно вызывать команду SetClipboardData для каждого из форматов, какие она хочет поместить в буфер, от лучшего к худшему (поскольку то приложение, куда будут вставляться данные, выберет первый подходящий формат из списка). Чтобы облегчить жизнь разработчику, Windows автоматически обеспечивает конвертацию некоторых типов форматов для буфера обмена. По окончании процесса программа вызывает CloseClipboard.
Когда пользователь нажимает кнопку «Вставить», целевое приложение вызывает OpenClipboard и одну из следующих функций для определения доступных форматов данных: IsClipboardFormatAvailable, GetPriorityClipboardFormat или EnumClipboardFormats. Если оно находит подходящий формат, то тогда вызывает GetClipboardData с идентификатором нужного формата в качестве параметра, чтобы получить данные. В конце приложение использует команду CloseClipboard для закрытия буфера.
БУФЕР ОБМЕНА в один клик | Удобный буфер обмена | Обзор
Теперь взглянем, как с помощью отладчика определить, какие данные записаны в буфер обмена. (Заметьте, что все мои записи сделаны в системе Win7/2008 R2 — так что на других версиях ОС они могут выглядеть несколько иначе). Поскольку буфер является частью Win32k.sys, вам понадобится отладчик ядра. Я люблю использовать в качестве контрольной точки win32k!InternalSetClipboardData+0xe4 . В таком смещении хорошо то, что оно находится за регистром RDI, заполненным данными из SetClipboardData в структуре, известной как tagCLIP.
kd> u win32k!InternalSetClipboardData+0xe4-c L5 win32k!InternalSetClipboardData+0xd8: fffff960`0011e278 894360 mov dword ptr [rbx+60h],eax fffff960`0011e27b 8937 mov dword ptr [rdi],esi fffff960`0011e27d 4c896708 mov qword ptr [rdi+8],r12 fffff960`0011e281 896f10 mov dword ptr [rdi+10h],ebp fffff960`0011e284 ff15667e1900 call qword ptr[win32k!_imp_PsGetCurrentProcessWin32Process (fffff960`002b60f0)]
kd> dt win32k!tagCLIP +0x000 fmt : Uint4B +0x008 hData : Ptr64 Void +0x010fGlobalHandle : Int4B
Вот как выглядит вызов к SetClipboardData от «Блокнота»:
kd> k Child-SP RetAddr Call Site fffff880`0513a940 fffff960`0011e14f win32k!InternalSetClipboardData+0xe4 fffff880`0513ab90 fffff960`000e9312 win32k!SetClipboardData+0x57 fffff880`0513abd0 fffff800`01482ed3 win32k!NtUserSetClipboardData+0x9e fffff880`0513ac20 00000000`7792e30ant!KiSystemServiceCopyEnd+0x13 00000000`001dfad8 00000000`7792e494 USER32!ZwUserSetClipboardData+0xa 00000000`001dfae0 000007fe`fc5b892b USER32!SetClipboardData+0xdf 00000000`001dfb20 000007fe`fc5ba625 COMCTL32!Edit_Copy+0xdf 00000000`001dfb60 00000000`77929bd1 COMCTL32!Edit_WndProc+0xec9 00000000`001dfc00 00000000`779298da USER32!UserCallWinProcCheckWow+0x1ad 00000000`001dfcc0 00000000`ff5110bc USER32!DispatchMessageWorker+0x3b5 00000000`001dfd40 00000000`ff51133c notepad!WinMain+0x16f 00000000`001dfdc0 00000000`77a2652d notepad!DisplayNonGenuineDlgWorker+0x2da 00000000`001dfe80 00000000`77b5c521 kernel32!BaseThreadInitThunk+0xd 00000000`001dfeb0 00000000`00000000ntdll!RtlUserThreadStart+0x1d
Итак, теперь мы можем просмотреть содержимое RDI как tagCLIP и увидеть, что записано в буфер:
Fmt — это формат для буфера обмена. 0Xd — это число 13, что соответствует тексту в формате Юникода. Однако мы не можем просто запустить du по значению hData , потому что это дескриптор, а не прямой указатель на данные. Так что нужно поискать его в глобальной структуре win32k — gSharedInfo:
kd> ?win32k!gSharedInfo Evaluate expression: -7284261440224 = fffff960`002f3520 kd> dt win32k!tagSHAREDINFO fffff960`002f3520 +0x000 psi : 0xfffff900`c0980a70 tagSERVERINFO +0x008 aheList : 0xfffff900`c0800000 _HANDLEENTRY +0x010 HeEntrySize : 0x18 +0x018 pDispInfo : 0xfffff900`c0981e50 tagDISPLAYINFO +0x020ulSharedDelta : 0 +0x028 awmControl : [31] _WNDMSG +0x218DefWindowMsgs : _WNDMSG +0x228DefWindowSpecMsgs : _WNDMSG
aheList в gSharedInfo содержит массив с дескрипторами, и последние два байта hData, умноженные на размер записи дескриптора, показывают адрес записи нашего дескриптора:
kd> ?0x00000000`00270235 ??sizeof(win32k!_HANDLEENTRY) unsigned int64 0x18 kd> ? 0xfffff900`c0800000 + (0x235*0x18) Evaluate expression: -7693351766792 = fffff900`c08034f8 kd> dt win32k!_HANDLEENTRY fffff900`c08034f8 +0x000 phead : 0xfffff900`c0de0fb0 _HEAD +0x008 pOwner : (null) +0x010 bType : 0x6 » +0x011 bFlags : 0 » +0x012 wUniq : 0x27
Если посмотреть phead со смещением 14, то мы получим наши данные (это смещение может отличаться на разных платформах):
kd> du fffff900`c0de0fb0 + 0x14 fffff900`c0de0fc4 «Hi NTDebugging readers!»
Представим другой сценарий. Я скопировал какой-то текст из Wordpad, и команда SetClipboardData отработала определённое количество раз, чтобы разместить данные в разных форматах. Запись в формате Юникода выглядит так::
hData равен нулю! Почему так? Оказывается, буфер обмена позволяет приложению передавать нуль в качестве параметра SetClipboardData для определённого формата. Это означает, что приложение способно предоставить данные в данном формате, но сделает это позже, в случае необходимости.
Если я захочу вставить текст в «Блокнот», для чего в буфере должен быть текст в Юникоде, Windows отправит сообщение WM_RENDERFORMAT в окно WordPad, и тогда WordPad предоставит данные в новом формате. Конечно, если приложение закрывается до того, как предоставило данные во всех форматах, Windows понадобятся все форматы. В этом случае Windows отправит сообщение WM_RENDERALLFORMATS, чтобы другие приложения могли использовать данные из буфера обмена после закрытия материнского приложения.
Теперь посмотрим, как приложение может отслеживать буфер обмена на предмет изменений. Это важно знать, потому что в этом месте Windows позволяет сторонним приложениям подключаться к системе. Если у вас наблюдаются непонятные глюки с копированием и вставкой, причиной может быть некорректное поведение какой-то из таких программ. Начнём с того, что рассмотрим механизмы подключения к буферу обмена. Затем рассмотрим, можно ли с помощью отладчика идентифицировать приложения, которые используют такие хуки.
Есть три способа отслеживать буфер обмена на предмет изменений: просмотр буфера, прослушивание форматов буфера и запрос порядкового номера буфера. Мы сосредоточимся на первых двух способах, потому что они предусматривают получение уведомлений, когда содержимое буфера обновилось. В третьем методе приложение должно само проверять каждый раз, изменился ли буфер, и этот метод нельзя использовать в цикле опросов.
Функциональность Clipboard Viewer появилась ещё в версии Windows 2000, если не раньше. Принцип работы довольно простой: приложение, которое заинтересовано в получении уведомлений об изменении в буфере, вызывает SetClipboardViewer и передаёт дескриптор своего окна. Windows хранит этот дескриптор в структуре win32k, и каждый раз при изменении буфера обмена Windows отправляет сообщение WM_DRAWCLIPBOARD в зарегистрированное окно.
Конечно, зарегистрироваться для просмотра буфера могут несколько окон — как Windows справится с этим? Ну, если приложение вызывает SetClipboardViewer, а другое окно раньше уже зарегистрировалось для просмотра буфера обмена, то Windows возвращает новому окну значение дескриптора предыдущего окна.
И теперь новое окно, следящее за буфером, обязано вызвать SendMessage каждый раз, когда получает WM_DRAWCLIPBOARD, и уведомить об изменении буфера следующее окно в цепочке тех, кто следит за буфером. Каждое из окон, следящих за буфером, также должно обрабатывать сообщения WM_CHANGECBCHAIN. Такие сообщения уведомляют все остальные окна об удалении одного звена в цепочке и сообщают, какое звено становится следующим в очереди. Это позволяет сохранить цепочку.
Очевидная проблема подобной архитектуры состоит в следующем: она рассчитывает, что каждое приложение, следящее за буфером, будет вести себя корректно, не завершать неожиданно работу и в целом будет хорошим гражданином в системе. Если какое-то из приложений начнёт вести себя недружественно, то оно не отправит уведомление об изменении буфера обмена следующему приложению в цепочке, в результате чего вся цепочка останется без уведомлений.
Чтобы справиться с такими проблемами, в Windows Vista добавили механизм прослушивания формата буфера обмена — Clipboard Format Listener. Он работает во многом так же, как просмотр буфера обмена, за исключением того, что Windows сама ведёт список приложений, которые прослушивают буфер, а не полагается на добропорядочность приложений, которые должны сохранять цепочку.
Если приложение хочет прослушивать буфер, оно вызывает функцию AddClipboardFormatListener и передаёт дескриптор своего окна. После этого обработчик сообщений окна будет получать сообщения WM_CLIPBOARDUPDATE. Когда приложение собирается завершить работу или больше не хочет получать уведомления, оно вызывает RemoveClipboardFormatListener.
Сведения о буфере обмена
Буфер обмена — это набор функций и сообщений, позволяющих приложениям передавать данные. Так как все приложения имеют доступ к буферу обмена, данные можно легко передавать между приложениями или в приложении.
Буфер обмена управляется пользователем. Окно должно передавать данные в буфер обмена или из нее только в ответ на команду пользователя. Окно не должно использовать буфер обмена для передачи данных без знаний пользователя.
Объект памяти в буфере обмена может находиться в любом формате данных, который называется форматом буфера обмена. Каждый формат определяется целым числом без знака. Для стандартных (предопределенных) форматов буфера обмена это значение является константой, определенной в Winuser.h; для зарегистрированных форматов буфера обмена это возвращаемое значение функции RegisterClipboardFormat .
За исключением регистрации форматов буфера обмена, отдельные окна выполняют большинство операций буфера обмена. Как правило, процедура окна передает сведения в буфер обмена или из нее в ответ на сообщение WM_COMMAND .
В этом разделе рассматривается следующее:
- Команды буфера обмена
- Порядковый номер буфера обмена
- Средства просмотра буфера обмена
- Средство просмотра буфера обмена Windows
- Форматы отображения
- Формат отображения владельца
Команды буфера обмена
Как правило, пользователь выполняет операции буфера обмена, выбирая команды из меню «Изменить «. Ниже приведено краткое описание стандартных команд буфера обмена.
Вырезать | Помещает копию текущего выделенного фрагмента в буфер обмена и удаляет выделенный фрагмент из документа. Предыдущее содержимое буфера обмена уничтожается. |
Копировать | Помещает копию текущего выделения в буфер обмена. Документ остается неизменным. Предыдущее содержимое буфера обмена уничтожается. |
Вставить | Заменяет текущий выделенный фрагмент содержимым буфера обмена. Содержимое буфера обмена не изменяется. |
Удаление | Удаляет текущий выделенный фрагмент из документа. Содержимое буфера обмена не изменяется. Эта команда не включает буфер обмена, но она должна отображаться с командами буфера обмена в меню «Изменить «. |
Порядковый номер буфера обмена
Буфер обмена для каждой станции окон имеет связанный порядковый номер буфера обмена. Это число увеличивается при каждом изменении содержимого буфера обмена. Чтобы получить порядковый номер буфера обмена, вызовите функцию GetClipboardSequenceNumber .
Средства просмотра буфера обмена
Средство просмотра буфера обмена — это окно, в котором отображается текущее содержимое буфера обмена. Окно просмотра буфера обмена удобно для пользователя и не влияет на функции транзакций данных буфера обмена.
Как правило, окно просмотра буфера обмена может отображать по крайней мере три наиболее распространенных формата: CF_TEXT, CF_BITMAP и CF_METAFILEPICT. Если окно не делает данные доступными в любом из этих трех форматов, оно должно предоставлять данные в формате отображения или использовать формат отображения владельца.
Цепочка просмотра буфера обмена — это связывание двух или более сущностей, чтобы они зависели друг от друга для операции. Эта взаимозависимость (цепочка) позволяет всем запущенным приложениям средства просмотра буфера обмена получать сообщения, отправленные в текущий буфер обмена.
В этом разделе рассматриваются следующие темы.
- Средство просмотра буфера обмена Windows
- Форматы отображения
- Формат отображения владельца
Средство просмотра буфера обмена Windows
Окно добавляется в цепочку просмотра буфера обмена путем вызова функции SetClipboardViewer . Возвращаемое значение — это дескриптор следующего окна в цепочке. Чтобы получить дескриптор в первом окне в цепочке, вызовите функцию GetClipboardViewer .
Каждое окно средства просмотра буфера обмена должно отслеживать следующее окно в цепочке средства просмотра буфера обмена. При изменении содержимого буфера обмена система отправляет сообщение WM_DRAWCLIPBOARD в первое окно в цепочке. После обновления его отображения каждое окно средства просмотра буфера обмена должно передать это сообщение в следующее окно в цепочке.
Перед закрытием окно просмотра буфера обмена должно удалить себя из цепочки средств просмотра буфера обмена, вызвав функцию ChangeClipboardChain . Затем система отправляет сообщение WM_CHANGECBCHAIN в первое окно в цепочке.
Форматы отображения
Формат отображения — это формат буфера обмена, используемый для отображения сведений в окне просмотра буфера обмена. Владелец буфера обмена, использующий частный или зарегистрированный формат буфера обмена, и ни один из наиболее распространенных стандартных форматов не должен предоставлять данные в формате отображения для просмотра в окне просмотра буфера обмена. Форматы отображения предназначены только для просмотра и не должны быть вставлены в документ.
Четыре формата отображения: CF_DSPBITMAP, CF_DSPMETAFILEPICT, CF_DSPTEXT и CF_DSPENHMETAFILE. Эти форматы отображения отображаются так же, как и стандартные форматы: CF_BITMAP, CF_TEXT, CF_METAFILEPICT и CF_ENHMETAFILE.
Формат отображения владельца
Для владельца буфера обмена, который не использует стандартные форматы буфера обмена, альтернативным вариантом предоставления формата отображения является использование формата буфера обмена (CF_OWNERDISPLAY) владельца.
Используя формат отображения владельца, владелец буфера обмена может избежать дополнительных расходов на отрисовку данных в дополнительном формате, используя прямой контроль над рисованием окна средства просмотра буфера обмена. Окно просмотра буфера обмена отправляет сообщения владельцу буфера обмена каждый раз, когда часть окна должна быть переопределена или когда окно прокручивается или изменяется.
Источник: learn.microsoft.com
Компьютерная грамотность с Надеждой
Заполняем пробелы — расширяем горизонты!
Буфер обмена данными: что это?
В операционных системах Windows, Mac OS или Андроид пользователям компьютера и Интернета была предоставлена возможность работать одновременно в нескольких окнах с несколькими программами.
У пользователей сразу же возник соблазн передачи данных из одних программ (из одних окон) в другие программы (в другие окна).
Действительно, имеешь, например, подходящий текст в формате Блокнота (скажем, с расширением .txt), и это текст вполне пригоден, чтобы его вставить в подготавливаемую презентацию (скажем, в формате PowerPoint). Не перепечатывать же его заново?! Текст уже есть, но в другом формате и в другом окне, в другой программе. Так и хочется его каким-то образом автоматически перенести в другое окно, в другую программу.
Или, например, пользователь ПК сделал фотографию и сохранил ее в формате (например, с расширением .jpeg). И теперь надо эту фотку вставить в виде рисунка, например, в текст Word, чтобы «украсить» текст, сделать «книжку с картинками». Подобных примеров, когда есть желание перенести данные из одной программы (из одного окна) в другую программу (в другое окно) можно привести множество. А если есть желания, то должны быть и соответствующие возможности.
Как сделать так, чтобы можно было из одной программы в другую переносить совершенно любые данные: тексты, картинки, графику, чертежи, схемы и даже видео или аудио и пр.?
Что такое Буфер обмена
Разработчики операционных систем придумали довольно оригинальный способ, который может считаться универсальным, пригодным для передачи практически любых данных.
Достаточно в одной программе выделить данные, подлежащие переносу в другую программу, и скопировать их в некую специальную область. Затем в другой программе, куда должны быть перенесены данные, нужно установить курсор в то место, куда данные должны быть помещены, и после этого выполнить процедуру вставки данных из этой специальной области, которые ранее были туда скопированы.
Кстати, процедура копи-паст работает также в пределах одного окна, одной программы, если данные нужно копировать из одного места и вставить в другое место текста, презентации и т.п.
Благодаря внешней простоте подобной процедуры переноса данных из одного окна в другое, эта процедура получила жаргонное наименование «копи-паст». Слово «копипаст» произошло от двух английских слов «copy-paste», что в переводе означает «копировать-вставить».
Специальная область, в которую данные сначала копируются, а потом оттуда восстанавливаются (вставляются), получила название «буфер обмена» (по-английски «clipboard», переводится так же – «буфер обмена»).
Здорово придумано: пользователю даже не надо задумываться, что такое буфер обмена, каким образом выделенные данные туда попадают, и потом каким образом эти данные восстанавливаются из буфера обмена в окне другой программы или в другом месте той же программы.
Операции «Копировать» или «Вырезать», а потом «Вставить» и связанный с этими операциями буфер обмена являются стандартными функциями операционных систем Windows, Mac OS или Андроид.
Схема работы буфера обмена в Windows, Mac, Android
Как правило, в буфер обмена информация попадает, когда пользователь использует одну из двух операций:
- «Копировать» (горячие клавиши Ctrl+C) или
- «Вырезать» (Ctrl+X).
А из буфера обмена пользователь извлекает информацию с помощью операции «Вставить» (Ctrl+V).
Таким образом, буфер обмена является промежуточным хранилищем информации, которое занимает некоторую часть оперативной памяти компьютера. Оперативная память предназначена для временного хранения информации.
Стандартный буфер обмена как часть оперативной памяти способен сам себя очищать, например, при выключении компьютера или при помещении туда новой информации.
Скриншот экрана, если в Windows его делать с помощью кнопки PrtScr (сокращение от Print Screen), то он также попадает в буфер обмена. И извлечь скриншот из буфера обмена можно с помощью операции «Вставить».
Операции буфера обмена «Копировать» и «Вставить»
Многие программы имеют в своем арсенале возможностей пункты меню и кнопки «Копировать» («Copy»), а также пункты меню и кнопки «Вставить» («Paste»).
Как правило, из-за частого применения этих пунктов, данные пункты меню находятся чаще всего в самом главном меню программ, а кнопки «Копировать» («Copy») и «Вставить» («Paste») могут иметь довольно большой размер и могут быть хорошо заметными (рис. 1).
Рис. 1. Кнопки «Вставить» и «Копировать» в программе Microsoft Word
1 на рис. 1 – кнопка «Копировать» в программе Word, которая будет активна только в том случае, когда выделен текст (или картинка), и, следовательно, есть объект для копирования и помещения его в буфер обмена,
2 на рис. 1 – кнопка «Вставить».
Многие контекстные меню, которые появляются при щелчке правой кнопкой мыши (ПКМ) по выделенному фрагменту документа (текст, рисунок и т.п.) имеют опции «Копировать» и «Вставить», поскольку это часто применяемые действия пользователей ПК при работе с программами (рис. 2).
Рис. 2. Пункты контекстного меню «Копировать» и «Параметры вставки» в программе Microsoft Word
Заменой кнопок «Копировать» и «Вставить» (1 и 2 на рис. 1) являются пункты контекстного меню точно с такими же названиями (1 и 2 на рис. 2).
Все ли так просто?
Чаще всего пользователь применяет копирование и вставку для переноса данных из одного места программы в другое место или из одной программы в другую, даже не задумываясь, как это делается. И почти в 100% случаев получается адекватный результат: данные из одной программы переносятся без искажений в другую программу или из одного места они переходят в другое в пределах одной программы.
Но могут быть и исключения. И тогда применение буфера обмена может привести к искажению данных, если неправильно пользоваться предоставленными возможностями. Это случается редко, но все-таки может случиться. Разберем примеры «искажения» данных, а точнее, примеры неправильной работы с буфером обмена.
Буфер обмена или буфер обмана на примере Excel
Пользователи электронных таблиц Excel знают, что в ячейках программы Excel могут храниться не только цифры, но и формулы для их вычисления. А в самих ячейках высвечиваются данные, полученные в результате вычислений по этим формулам. Теперь представьте себе, что мы ставим курсор в такую ячейку с формулой, жмем «Копировать» и данные помещаем в буфер обмена.
Затем ставим курсор в другую свободную ячейку и жмем «Вставить». Что должно попасть в эту свободную ячейку? Формула, которая стояла в прежней ячейке, из которой мы копировали данные в буфер обмена? Или число, которое стояло в прежней ячейке?
Если формула, то результат вставки будет один (вставленная формула сработает, и в ячейке появится число, являющееся результатом вычисления по этой формуле). Если же вставится число, то результат вставки – это число, полностью равное тому, которое стояло в ячейке, из которой производилось копирование.
Понятно, что в итоге в новой ячейке мы можем увидеть либо одно число (если вставилась формула), либо другое (если вставилось число). Значит, мы можем получить как «правильный», так и «неправильный» результат. То есть мы или получим точный ответ из буфера обмена, или получим неточный ответ уже из «буфера обмана»!
Как не ошибиться? Надо знать, ЧТО по умолчанию вставляется из буфера обмена в той или иной программе. Именно знать. Для этого надо про это где-то прочитать (в справке к программе, например), или поэкспериментировать самостоятельно. Если не знать, то можно получить неверные данные, опираясь на возможности уже не буфера обмена, а «буфера обмана»!
В приведенном примере с программой Excel опытные пользователи этой программы знают, что по умолчанию в ячейку вставляется формула, а не значение. Если же нужно из буфера обмена вставить все-таки значение, а не формулу, то надо пользоваться дополнительным меню вставки, и выбирать из него «Вставить значение» (цифра 1 на рис. 3) или воспользоваться «Специальной вставкой» (цифра 2 на рис. 3 и рис. 4):
Рис. 3. Вставка значения в новую ячейку (вместо формулы) (цифра 1) или использование «Специальной вставки» (цифра 2)
Если кликнуть по опции «Специальная вставка» (2 на рис. 3), то в открывшемся окне с таким же названием получим много вариантов вставки:
Рис. 4. Окно «Специальная вставка» программы Excel для выбора вариантов вставки скопированных данных из буфера обмена в новую ячейку.
Как видим на рис. 4 в новую ячейку можно вставить не только значения или формулы, но и форматы данных, формулы и значения вместе с форматами и пр., а также примечания к ячейкам, условия на значения, и в том числе добавить дополнительные операции для обработки данных.
Вот так можно с одной стороны окончательно запутаться с вроде бы простым буфером обмена, с которым обычные пользователи чаще всего делают две операции «Копировать» и «Вставить». С другой стороны, можно получить множество дополнительных возможностей, если эти возможности предусмотрены в программе, пользующейся буфером обмена.
О буфере обмена Microsoft Office, в том числе, 2010, 2013, 2016
Развернутые, расширенные функции по управлению буфером обмена предлагаются в пакете Microsoft (сокращенно MS) Office. Это позволяет делать программа «Буфер обмена», встроенная в пакет MS Office. (В этот пакет входит набор программ: текстовый редактор Word, электронные таблицы Excel, презентации PowerPoint, базы данных Access и другие).
С помощью буфера обмена в MS Office можно осуществлять копирование и вставку не один раз и не раз за разом, а многократно.
В буфере обмена может храниться до 24 копий текстовых и графических элементов, которые в свою очередь затем можно вставлять все сразу, либо по одному, либо иным способом.
Обращение к возможностям буфера обмена, которое осуществляется из любой программы пакета MS Office, показано ниже на рис. 5 на примере Excel.
Из одного буфера обмена можно вставлять данные в разные программы офиса: Word, Excel, PowerPoint и др. Проще говоря, можно картинку скопировать один раз, после чего она будет помещена в программу «Буфер обмена» MS Office. Затем эту картинку можно поместить из буфера обмена и в редактор Word, и в таблицу Excel, и в презентацию PowerPoint.
Рис. 5. Буфер обмена в Excel
Подробнее про буфер обмена для офиса 2010, в частности, про его включение и отключение, про настройку его видимости, информация с официального сайта на русском языке:
Официальный сайт Microsoft на русском языке о буфере обмена для Office 2013 и 2016:
Программа «Буфер обмена» в MS Office иначе еще называют менеджером буфера обмена. Есть и другие специальные программы для операционных систем, называемые менеджерами буфера обмена, которые предназначены для расширения возможностей стандартного буфера обмена.
Возвращаясь к стандартным возможностям обычного буфера обмена, который есть в Windows, Mac OS или Андроид, отметим, что в нем сохраняются последние данные, которые туда были скопированы.
Если копировать в буфер обмена несколько раз подряд, то вставить можно будет только данные, которые туда были скопированы последний раз, а все предыдущие копии автоматически стираются из стандартного буфера обмена.
Таким образом, при необходимости многократного использования стандартного буфера обмена нужно после каждой операции «Копировать» сразу же использовать операцию «Вставить». Многократно подряд скопировать, и потом многократно подряд вставить (даже если это кажется более удобным вариантом работы), пользуясь стандартными возможностями буфера обмена, нельзя.
Буфер обмена в Word
Специальные вставки есть не только в довольно сложной и многофункциональной программе Excel, но и в том же Ворде (рис. 6), а также во многих других программах. И об этом надо помнить, если активно пользоваться буфером обмена, чтобы он не превратился в итоге в «буфер обмана».
Рис. 6.1. Меню «Вставить» в Word
Если в Ворде открыть меню «Вставить» (1 на рис. 6.1), а затем кликнуть по опции «Специальная вставка» (2 на рис. 6.1), то можно увидеть предлагаемые возможности вставки из буфера обмена:
Рис. 6.2. Специальная вставка из буфера обмена в программе Microsoft Word
Вставить данные можно напрямую, без буфера обмена
И еще хотелось бы отметить следующее. Вставлять данные в программы можно не только из буфера обмена. Картинки можно вставлять из файлов, тексты можно тоже вставлять из файлов, в таблицы можно вставлять графики и диаграммы и многое-многое другое. Здесь уже буфер обмена не при чем! И меню «Вставка» в том же Ворде (рис.
7) тоже не имеет не малейшего отношения к вставке данных из буфера обмена, хоть это меню записывается одинаково с наименованием кнопки «Вставить», предназначенной для вставки из буфера обмена.
Рис. 7. Меню «Вставка» программы Microsoft Word, НЕ имеющее отношения к вставке из буфера обмена
На рис. 7 видно, что в Word в меню «Вставка», которое НЕ связано с буфером обмена, входят:
- страницы,
- таблицы,
- рисунок,
- клип,
- диаграммы,
- колонтитулы,
- надписи,
- символы
- и т.д.
Таким образом, пользуясь буфером обмена, пользователь ПК может вставлять данные, ранее скопированные туда из другого места той же программы или из другой программы. И это никак не связано с другими возможностями вставки других данных, которых, как видим, тоже немало.
Что значит «Буфер обмена содержит большой фрагмент»?
После завершения работы с программами в буфере обмена остаются последние скопированные данные. Даже после закрытия программы, из которой данные были скопированы, эти данные останутся в буфере обмена, и их можно использовать для вставки в другие программы (в другие окна).
Если эти данные в буфере обмена занимают много места (например, скопирован большой текст, объемная картинка и др.), то при выходе из программы может быть выдано предупреждение о том, что в буфере обмена остался большой объем информации (рис. 8).
Рис. 8. Предупреждение, что в буфере обмена остался большой объем информации.
В этом случае пользователь должен принять решение, оставлять ли эти данные или буфер обмена нужно «почистить» одновременно с закрытием программы, из которой эти данные были скопированы.
1 на рис. 8 – если нажать «Да», тогда данные останутся в буфере обмена, программа Word будет закрыта.
2 на рис. 8 – клик по «Нет», данные будут удалены из буфера обмена, Word будет закрыт.
3 на рис. 8 – если щелкнуть «Отмена», тогда ничего не изменится, ибо пользователь передумал очищать буфер обмена и закрывать Word.
Решение, какую из трех кнопок выбрать, остается за пользователем.
Если данные из буфера обмена удалить, то их уже нельзя будет вставить в другие программы. А если оставить, то вставить их будет возможно. Но при этом на хранение большого объема данных в буфере обмена потребуется много ресурсов ПК. Тут уж пользователь должен определиться, что он хочет: сохранить данные в буфере обмена или сохранить ресурсы оперативной памяти на своем устройстве для дальнейшей работы.
Не забывайте!
Копировать тексты, картинки и прочую информацию из Интернета без указания ссылки на источник можно только для личного использования.
Если же скопированная информация повторно выкладывается в Интернет БЕЗ указания ссылки на источник информации, то это является нарушением авторских прав и может повлечь неприятные последствия.
Источник: www.compgramotnost.ru