Опишите правила работы с буфером обмена кратко

Обновлено: 02.07.2024

На уроке 15 мы говорили о причине появления лишних стилей. И одна из причин появления лишних стилей – это неумение правильно пользоваться таким явлением, как буфер обмена и, в частности, такой возможностью, как специальная вставка из буфера обмена.

По окончании урока вы сможете:

  1. Рассказать, что такое буфер обмена
  2. Применить специальную вставку из буфера обмена

Буфер обмена – это часть памяти компьютера, в которой можно сохранить информацию, которую вы скопировали. По мере необходимости скопированную информацию можно извлекать из буфера обмена и вставлять в выбранное нами место.

1. Буфер обмена. Возможности буфера обмена

Скачайте документ тут. Откройте документ.

Скопированную информацию можно вставлять много раз.

Буфер обмена един для всех программ, установленных на компьютере. Вы можете скопированный текст вставить в графический редактор Visio или CorelDraw. Скопированная информация храниться в буфере обмена, до тех пор, пока вы не скопируете что-нибудь новое. Новое затирает старое.

Но у офисных программ есть замечательная особенность: сохранение в буфере обмена до 24 (!) фрагментов. Причём, не важно каких: размер, вид, объём – всё это не важно. Одно копирование – один фрагмент. Воспользуемся этой особенностью.

  1. Лента Главная → группа команд Буфер обмена → кнопка группы. Откроется окно Буфера обмена.
  2. Выберите команду Параметры → Установите галочки:
  • Собирать данные без отображения буфера обмена Office
    Данные в количестве до 24 фрагментов будут собираться в буфере обмена вне зависимости открыто окно Буфера обмена или нет. Если вы скопировали больше 24 раз, то информация, скопированная первой, исчезнет, и так по кругу.
    Интересная особенность: если вы копируете информацию в другой неофисной программе (например, вы работаете в графическом редакторе), то эта информация в количестве до 24 фрагментов будут собираться в буфере обмена Office. Тогда как в программе, в которой вы работаете в настоящий момент, будет доступен только последний скопированный фрагмент.
    Если бы вы знали, как часто меня выручала информация, собранная в буфере обмена Office!
  • Показать значок буфера обмена Office на панели задач

Буфер обмена

Буфер обмена настраивается один раз. Если вы закроете окно Буфера обмена, то настройки сохраняться. Закрывается Буфер обмена повторным щелчком ЛМ по кнопке группы (Лента Главная → группа команд Буфер обмена → кнопка группы):Если вам необходимо вставить фрагмент, скопированный ранее, то откройте окно Буфера обмена (вы уже знаете, как это делается). Далее из списка скопированный фрагментов выберите нужный вам фрагмент и щёлкните на нём ЛМ – фрагмент вставиться из буфера обмена.

Буфер обмена

Обратите внимание: на выбранном вами фрагменте появляется кнопка выпадающего меню. Щёлкните ЛМ по кнопке выпадающего меню и вы увидите две команды на выбор: Вставить и Удалить. Командой Удалить вы удаляете этот фрагмент из буфера обмена:

Запомните! Скопированная информация хранится в буфере обмена до тех пор, пока вы не перезагрузите или выключите компьютер.

2. Буфер обмена. Специальная вставка

Если нам нужно вставить один абзац, то можно, перетаскивая мышку, выделить текст без символа конца абзаца, скопировать и вставить в новый документ, что мы и делали на Уроке 15. А если нам нужно скопировать несколько абзацев? Ведь в этом случае мы поневоле копируем символы конца абзаца, а с ними тащим в наш новенький чистенький документ кучу ненужных нам стилей, в чём мы уже с вами убедились на прошлом уроке. В этом случае нас выручит специальная вставка буфера обмена.

Вы открыли Учебный файл_Специальная вставка?

Пройдитесь курсором по четырём кнопкам в раскрывшемся окне параметры вставки.

Первая кнопка

В этом случае мы притащим в новый документ все стили текста, которые только есть в старом документе. Оно нам надо?

Вторая кнопка даёт такую картину:Третья кнопка даёт такую картину:

Как видите, есть риск получить в список стилей Встроенный стиль.

Буфер обмена

Четвёртая кнопка даёт такую картину:

  • Новые стили в области задач Стили не появились,
  • Автоматическая нумерация списков превратилась в обычный текст.

Буфер обмена управляется пользователем. Окно должно передавать данные в буфер обмена или из него только в ответ на команду от пользователя. Окно не должно использовать буфер обмена для перемещения данных без ведома пользователя.

В этом разделе рассматриваются следующие вопросы:

Команды буфера обмена

Пользователь обычно выполняет операции с буфером обмена, выбирая команды из меню " Правка " приложения. Ниже приведено краткое описание стандартных команд буфера обмена.

Команда Описание
Вырезать Помещает копию текущего выделенного фрагмента в буфер обмена и удаляет выделенный фрагмент из документа. Предыдущее содержимое буфера обмена уничтожается.
Копировать Помещает копию текущего выделенного фрагмента в буфер обмена. Документ остается без изменений. Предыдущее содержимое буфера обмена уничтожается.
Вставить Заменяет текущий выделенный фрагмент содержимым буфера обмена. Содержимое буфера обмена не изменяется.
Удаление Удаляет текущий выделенный фрагмент из документа. Содержимое буфера обмена не изменяется. Эта команда не затрагивает буфер обмена, но она должна отображаться с командами буфера обмена в меню Правка .

Порядковый номер буфера обмена

Буфер обмена для каждой станции Windows имеет связанный порядковый номер буфера обмена. Это число увеличивается при каждом изменении содержимого буфера обмена. Чтобы получить порядковый номер буфера обмена, вызовите функцию жетклипбоардсекуенценумбер .

Средства просмотра буфера обмена

Средство просмотра буфера обмена — это окно, в котором отображается текущее содержимое буфера обмена. Окно просмотра буфера обмена является удобным для пользователя и не влияет на функции транзакций с данными в буфере обмена.

Как правило, окно просмотра буфера обмена может отображать по крайней мере три наиболее распространенных формата: _ текст CF, _ точечный рисунок CF и CF _ метафилепикт. Если окно не делает данные доступными ни в одном из этих трех форматов, они должны предоставлять данные в формате вывода или использовать формат, отображаемый владельцем.

В этом разделе рассматриваются следующие темы.

Средство просмотра буфера обмена Windows

Окно добавляет себя в цепочку средства просмотра буфера обмена путем вызова функции сетклипбоардвиевер . Возвращаемое значение — это обработчик следующего окна в цепочке. Чтобы получить маркер для первого окна в цепочке, вызовите функцию жетклипбоардвиевер .

Форматы отображения

Поддерживаются четыре формата вывода: CF _ дспбитмап, CF _ Дспметафилепикт, CF _ дсптекст и CF _ дспенхметафиле. Эти форматы отображения отображаются так же, как стандартные форматы: _ точечный рисунок CF, _ текст CF, CF _ метафилепикт и CF _ енхметафиле.

Формат просмотра владельца

Для владельца буфера обмена, который не использует обычные стандартные форматы буфера обмена, альтернативой формату представления является использование формата буфера обмена Owner-дисплея (CF _ овнердисплай).

В своей работе я часто сталкиваюсь с необходимостью иметь несколько вариантов текста, находящегося в буфере обмена. Думаю, я не один такой, кто хотел бы получить больше возможностей и увеличить эффективность работы с буфером обмена, и потому хочу рассказать об одной замечательной программе ClipDiary, возможности которой вас приятно удивят.

Напомню стандартные приёмы работы с буфером обмена Windows:

  • Ctrl+C или Ctrl+Insert – скопировать выделенный фрагмент в буфер обмена
  • Ctrl+X или Shift+Delete – вырезать, т.е. скопировать в буфер обмена и удалить из текста
  • Ctrl+V или Shift+Insert – вставить последний скопированный элемент

Также можно пользоваться контекстным меню правой кнопки мышки:

Контекстное меню Copy Paste

Программа для работы с буфером обмена

Скачайте и установите программку ClipDiary.

Программа бесплатная для домашнего использования. При первом запуске появится мастер-помощник, который сам покажет все возможности программы, а также поможет настроить её. В главном окне программы можно открыть текущий буфер обмена с помощью иконки внизу экрана.

Здесь же всё автоматически. Нажимаем назначенную комбинацию клавиш один или несколько раз, пока не найдёте скопированный текст, и он сразу вставляется в документ. Единственно, чего мне не хватает, так это чтобы можно было связать горячую клавишу с одним конкретным словосочетанием, которое приходится часто вставлять. Приходится много раз нажимать кнопки, пока не доберёшься до чего нужно по списку.

Выглядит это вот так:

клипы

В списке перечислены все последние скопированные элементы. Свои горячие клавиши я настроил вот таким образом:

горячие клавиши

Вставка предыдущего элемента из списка

Как же данные появляются в буфере обмена? Очень просто, приложение сначала объявляет о праве собственности на буфер обмена через функцию OpenClipboard. После этого программа может очистить буфер обмена командой EmptyClipboard и, наконец, поместить туда свои данные командой SetClipboardData. SetClipboardData принимает два параметра. Первый — это идентификатор одного из форматов буфера обмена, которые мы упоминали выше. Второй — дескриптор сегмента в памяти, который содержит данные в этом формате. Приложение может неоднократно вызывать команду SetClipboardData для каждого из форматов, какие она хочет поместить в буфер, от лучшего к худшему (поскольку то приложение, куда будут вставляться данные, выберет первый подходящий формат из списка). Чтобы облегчить жизнь разработчику, Windows автоматически обеспечивает конвертацию некоторых типов форматов для буфера обмена. По окончании процесса программа вызывает CloseClipboard.

Теперь взглянем, как с помощью отладчика определить, какие данные записаны в буфер обмена. (Заметьте, что все мои записи сделаны в системе Win7/2008 R2 — так что на других версиях ОС они могут выглядеть несколько иначе). Поскольку буфер является частью Win32k.sys, вам понадобится отладчик ядра. Я люблю использовать в качестве контрольной точки win32k!InternalSetClipboardData+0xe4 . В таком смещении хорошо то, что оно находится за регистром RDI, заполненным данными из SetClipboardData в структуре, известной как tagCLIP.


Итак, теперь мы можем просмотреть содержимое RDI как tagCLIP и увидеть, что записано в буфер:


Fmt — это формат для буфера обмена. 0Xd — это число 13, что соответствует тексту в формате Юникода. Однако мы не можем просто запустить du по значению hData , потому что это дескриптор, а не прямой указатель на данные. Так что нужно поискать его в глобальной структуре win32k — gSharedInfo:


aheList в gSharedInfo содержит массив с дескрипторами, и последние два байта hData, умноженные на размер записи дескриптора, показывают адрес записи нашего дескриптора:


Если посмотреть phead со смещением 14, то мы получим наши данные (это смещение может отличаться на разных платформах):


Представим другой сценарий. Я скопировал какой-то текст из Wordpad, и команда SetClipboardData отработала определённое количество раз, чтобы разместить данные в разных форматах. Запись в формате Юникода выглядит так::

Теперь посмотрим, как приложение может отслеживать буфер обмена на предмет изменений. Это важно знать, потому что в этом месте Windows позволяет сторонним приложениям подключаться к системе. Если у вас наблюдаются непонятные глюки с копированием и вставкой, причиной может быть некорректное поведение какой-то из таких программ. Начнём с того, что рассмотрим механизмы подключения к буферу обмена. Затем рассмотрим, можно ли с помощью отладчика идентифицировать приложения, которые используют такие хуки.

Есть три способа отслеживать буфер обмена на предмет изменений: просмотр буфера, прослушивание форматов буфера и запрос порядкового номера буфера. Мы сосредоточимся на первых двух способах, потому что они предусматривают получение уведомлений, когда содержимое буфера обновилось. В третьем методе приложение должно само проверять каждый раз, изменился ли буфер, и этот метод нельзя использовать в цикле опросов.

Очевидная проблема подобной архитектуры состоит в следующем: она рассчитывает, что каждое приложение, следящее за буфером, будет вести себя корректно, не завершать неожиданно работу и в целом будет хорошим гражданином в системе. Если какое-то из приложений начнёт вести себя недружественно, то оно не отправит уведомление об изменении буфера обмена следующему приложению в цепочке, в результате чего вся цепочка останется без уведомлений.


Далее посмотрим адрес Win32Process как win32k!tagPROCESSINFO и узнаем значение rpwinsta:


Это наша Window Station. Сливаем содержимое через dt:

Ели мы знаем окно, то осталось несколько шагов, чтобы узнать, к какому процессу оно относится. Нас интересуют forspwndClipViewer, spwndClipboardListener и spwndClipOwner. Сначала запускаем dt, чтобы узнать значение tagWND. Для этой демонстрации мы используем spwndClipViewer:


Нас интересует только значение head — так что если смещение 0, делаем dt для того же адреса на _THRDESKHEAD:


Теперь запускаем dt для адреса, указанного в поле pti как tagTHREADINFO:


Теперь нам интересно только значение поля pEThread, которое мы можем передать в !thread:


Как видим, просмотр буфера обмена зарегистрировн от имени процесса viewer02.exe. Поскольку просмотр идёт по цепочке, определить следующий процесс в цепочке будет непросто. Но мы можем сделать это для тех, кто прослушивает буфер. Снова взглянем на нашу Window Station:


Если запустить dt на spwndClipboardListener, то увидим поле spwndClipboardListenerNext с указанием следующего прослушивающего процесса:


При достижении последнего процесса в списке прослушивающих буфер tagWND, значение его поля spwndClipboardListenerNext будет нулевым:


Используя адрес окна, мы можем тем же методом добраться до названия процесса. Как упоминалось ранее, поскольку tagWND — это структура ядра, ОС сама хранит указатели spwndClipboardListener/spwndClipboardListenerNext, так что они не могут привести к таким проблемам с отслеживанием буфера, как цепочки просмотра.

На этом заканчивается наш обзор буфера обмена Windows. Надеюсь, для вас он стал информативным. Хотите узнать больше о мониторинге буфера обмена? Вот хорошая статья MSDN об этом.

Ноутбук и телефон на столе

Исходя из приведенного выше описания, можно догадаться, что буфер обмена — это временное хранилище информации. Как им пользоваться? Выделите фрагмент текста, картинку или целый файл в Проводнике, скопируйте или вырежьте. Информация попадет в буфер обмена.

Что такое буфер обмена и как им пользоваться

Фото: softcatalog.info: UGC

Буфер обмена: как пользоваться

В более поздних версиях Windows такой утилиты нет. Как открыть буфер обмена? Воспользуйтесь специальными программами, например ClipX или Clpdiary. С их помощью можно регулировать объем буфера, удалять лишние хранящиеся там сведения, использовать сохраненную информацию.

Что такое буфер обмена и как им пользоваться

Фото: softcatalog.info: UGC

Чтобы зайти в буфер на телефоне:

  • выделите фрагмент текста;
  • немного дольше удерживайте над ним палец, появится соответствующее окно.

В буфере обмена телефона может храниться до 10 скопированных фрагментов, ими можно воспользоваться или удалить выборочно/все. Эта функция доступна не на всех телефонах, но точно есть на устройствах производства Samsung и LG.

Что такое буфер обмена и как им пользоваться

Фото: Все про Андроид: UGC

В работе зачастую требуется временное хранилище информации, чтобы обеспечить ее перенос. С целью контролировать буфер памяти используйте специальные программы или утилиты. Успехов!

Читайте также: