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

Обновлено: 19.09.2024

Одной из часто возникающих пользовательских задач является обмен данными между приложениями, либо частями одного приложения. Помимо загрузки данных из файлов, это реализуется использованием буфера обмена ( clipboard ), а также механизмом "перетащил и бросил" ( drag and drop ), который часто называют просто перетаскиванием.

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

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

Рассмотрим оба эти способа обмена данными на примере одной программы, простейшего текстового редактора. Он будет поддерживать основные операции работы с буфером обмена целевой операционной системы (вырезать, скопировать, вставить), а также открытие текстовых файлов для редактирования посредством механизма " drag and drop ".

В основе механизма перетаскивания лежат две операции : захвата и собственно перетаскивания и сброса. Виджет может быть при этом как источником перемещения информации, так и её приёмником.

Для поддержки в приложении Juce приёма сбрасываемых данных, класс компонента, отвечающего за это, должен быть унаследован либо от класса DragAndDropTarget (в случае, если виджет служит приёмником информации от других частей приложения), либо от FileDragAndDropTarget (в случае, если происходит обмен данными между программами).

Создадим класс TTextEditor , унаследовав его от TextEditor и FileDragAndDropTarget ( пример 20.1).

Листинг 20.1. Объявление класса TTextEditor (файл TTextEditor.h)

Класс FileDragAndDropTarget включает две чистые виртуальные функции:

  • virtual bool FileDragAndDropTarget::isInterestedInFileDrag(const StringArray& files) — вызывается для проверки, заинтересован ли компонент-приёмник в обработке предлагаемого набора перетаскиваемых файлов files . Принимаемый параметр — абсолютные пути к этому набору файлов. В том случае, если метод возвращает true , компонент должен выполнять какие-то действия, связанные с этим типом объектов;
  • virtual void FileDragAndDropTarget::filesDropped(const StringArray& files, int x, int y) — вызывается, когда пользователь сбросил файлы на компонент, после чего над этими файлами можно совершать какие-то действия. Первый параметр метода аналогичен таковому у предыдущей функции. Параметры x и y содержат координаты указателя мыши относительно компонента-приёмника.

Помимо вышеперечисленных, класс FileDragAndDropTarget включает ряд других виртуальных методов:

  • virtual void FileDragAndDropTarget::fileDragEnter(const StringArray& files, int x, int y) — вызывается, когда пользователь начинает перетаскивать над компонентом файлы;
  • virtual void FileDragAndDropTarget::fileDragExit(const StringArray& files) — вызывается, когда пользователь заканчивает перетаскивать над компонентом файлы (мышь находится за пределами компонента);
  • virtual void FileDragAndDropTarget::fileDragMove(const StringArray& files, int x, int y) — вызывается, когда пользователь перетаскивает над компонентом файлы (т.е. данный метод объединяет действие функций fileDragEnter и fileDragExit ).

Однако для нашего примера достаточно написать реализацию методов isInterestedInFileDrag и filesDropped ( пример 20.2).

Листинг 20.2. Реализация класса TTextEditor (файл TTextEditor.cpp)

Как видно из листинга, после того, как пользователь бросил на наш компонент TTextEditor файл , мы проверяем по его расширению, является ли он текстовым. Разумеется, можно было бы устроить эту проверку в методе isInterestedInFileDrag , но мне вариант обработки информации из файла в сочетании с проверкой его типа представился более удобным. Поэтому метод isInterestedInFileDrag просто возвращает true , т.е. принимаются все файлы. В том случае, если брошенный на компонент файл оказывается несоответствующего типа, об этом выводится предупреждение ( пример 20.2).

Помимо текстового редактора, компонент содержимого нашей программы будет включать меню , содержащее пункты "Файл" и "Правка". Соответственно, первый пункт меню будет содержать подпункты "Открыть. " и "Выход", а второй - "Вырезать", "Копировать", "Вставить" ( рис. 20.1). Описание работы с меню см. в "Элементы управления. Компоненты меню" .

Работа простейшего текстового редактора с поддержкой drag and drop


Рис. 20.1. Работа простейшего текстового редактора с поддержкой drag and drop

Объявление класса компонента содержимого представлено в листинге 20.3 .

Листинг 20.3. Объявление класса компонента содержимого TCentralComponent (файл TCentralComponent.h)

Как мы знаем из "Ввод и отображение текстовой информации" , класс TextEditor включает собственные методы вырезания (cut) , копирования (copy) и вставки (paste) информции, однако в Juce имеется специальный класс для работы с буфером обмена целевой операционной системы, SystemClipboard . Последний содержит два метода:

  • static void SystemClipboard::copyTextToClipboard(const String& text) — копирует текст text в буфер обмена;
  • static const String SystemClipboard::getTextFromClipboard() — вставляет текст из буфера.

Для того, чтобы вырезать текст в буфер , мы вначале копируем в буфер обмена выделенный пользователем текст с помощью метода const String TextEditor::getHighlightedText() const , а затем вставляем под курсором пустую строку ( пример 20.4).

Листинг 20.4. Реализация метода menuItemSelected класса компонента содержимого TCentralComponent (файл TCentralComponent.cpp)

Реализацию механизма drag and drop , связанную с обменом данными между двумя частями одной и той же программы показывает демонстрационное приложение Juce (выберите в меню Demo > Drag-and-drop). При перетаскивании элементов списка из левого верхнего угла программы на расположенный в нижнем правом углу виджет, на последнем появляется информация о номере брошенного элемента ( рис. 20.2).

Работа демонстрационного приложения Juce (демонстрируется технология drag and drop между частями одного приложения)


Рис. 20.2. Работа демонстрационного приложения Juce (демонстрируется технология drag and drop между частями одного приложения)

Посмотреть реализацию примера можно, перейдя в папку <каталог Juce>/juce/extras/JuceDemo/Source/demos и открыв файл DragAndDropDemo.cpp.

Виджет в правом нижнем углу программы, как понятно, наследует классу DragAndDropTarget . Его функции-члены аналогичны описанным выше для FileDragAndDropTarget : носят те же имена и выполняют те же действия, за исключением метода virtual void DragAndDropTarget::itemDropped(const String& sourceDescription, Component* sourceComponent, int x, int y) . Подобно методу filesDropped класса FileDragAndDropTarget , он вызывается тогда, когда пользователь бросил что-либо на компонент -приёмник. В качестве источника перетаскиваемых объектов для DragAndDropTarget выступает виджет класса, унаследованного от DragAndDropContainer . Последний обеспечивает возможность перетаскивания для своих дочерних компонентов, а также блоков текста.

В демонстрационном приложении Juce субкомпонентами виджета, унаследованного от DragAndDropContainer , являются как список — источник перетаскиваемых объектов, так и виджет-приёмник, класс которого наследует DragAndDropTarget .

Для того чтобы начать перетаскивание, любой субкомпонент может просто вызвать метод void DragAndDropContainer::startDragging(const var& sourceDescription, Component* sourceComponent, const Image& dragImage = Image::null, bool allowDraggingToOtherJuceWindows = false, const Point<int>* imageOffsetFromMouse = nullptr) для того, чтобы вступить во взаимодействие с объектом класса, унаследованного от DragAndDropTarget .

Метод принимает следующие параметры:

  • sourceDescription — строка или какая-либо переменная, используемая для описания перетаскиваемого объекта. Она передаётся компоненту-приёмнику;
  • sourceComponent — перетаскиваемый компонент;
  • dragImage — изображение, появляющееся под указателем мыши при перетаскивании. Если параметр принимает нулевое значение, вместо этого будет отображаться миниатюра перетаскиваемого объекта;
  • allowDraggingToOtherJuceWindows — в случае, если параметр принимает значение true , перетаскиваемый компонент отображается как отдельное окно окружения рабочего стола, которое может быть перетащено на объект класса, унаследованного от DragAndDropTargets , как родительского компонента, так и другого приложения;
  • imageOffsetFromMouse — если параметр dragImage не является нулевым изображением, то значение этого параметра задаёт смещение пиктограммы от указателя мыши. Если параметр не задан, то указатель мыши будет располагаться в центре изображения. Если dragImage — нулевое изображение, то этот параметр будет проигнорирован.
  • При разработке программ, осуществляющих взаимодействие с другими приложениями, могут оказаться полезны два метода класса DragAndDropContainer :
  • static bool DragAndDropContainer::performExternalDragDropOfFiles(const StringArray& files, bool canMoveFiles) — позволяет перетащить и сбросить набор файлов на другое приложение;
  • static bool DragAndDropContainer::performExternalDragDropOfText(const String& text) — позволяет перетащить и сбросить на другое приложение блок текста text.

Краткие итоги

В этой лекции вы познакомились с классами Juce, предоставляющими доступ к буферу обмена целевой операционной системы (SystemClipboard), а также реализующими обмен данными посредством механизма "перетащил и бросил" (DragAndDropTarget и FileDragAndDropTarget). Источником объектов, принимаемых DragAndDropTarget служит DragAndDropContainer .

Упражнение

Напишите программу, позволяющую перетаскивать блок текста из одной её части в другую.

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

Что такое буфер обмена

комбинации клавиш для работы с буфером обмена

Основные комбинации клавиш для работы с буфером обмена.

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

Буфер обмена используется для копирования или перемещения данных. Например, когда вы копируете текст, он помещается в буфер обмена и хранится там до тех пор, пока вы не скопируете что-то другое, что перезапишет предыдущий скопированный текст. Это работает точно также и с другими типами данных, например, с изображениями. При вставке текста, или другого скопированного объекта, он извлекается из буфера обмена и помещается в ту точку, куда вы вставляете данные.

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

При необходимости функциональность буфера обмена можно расширить при помощи сторонних программ (диспетчеры буфера обмена). Такие программы позволяют:

  • Создавать несколько буферов обмена и использовать их по отдельности. При этом в момент копирования или вставки нужно указать, какой из буферов нужно использовать. Это позволяет хранить сразу несколько разных объектов.
  • Просматривать содержимое всех созданных буферов обмена, индексировать данные и выполнять поиск.
  • Выполнять слияние, разделение или редактирование данных в буферах обмена.

Где находится буфер обмена

Буфер обмена всегда находится в оперативной памяти компьютера. Когда вы что-то копируете или вырезаете это помещается в оперативную память и хранится там до тех пор, пока вы не скопируете какой-то другой объект, который перезапишет предыдущий.

При использовании буфера обмена нужно помнить, что оперативная память — это энергозависимый тип компьютерной памяти. Это означает, что оперативная память хранит данные только до тех пор, пока есть электропитание. Если электропитание пропадает, то содержимое оперативной памяти полностью очищается.

Поэтому не стоит рассчитывать на буфер обмена как на надежное хранилище данных. Поскольку при выключении компьютера (по любой причине) содержимое буфера обмена будет полностью удалено.

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

Для того чтобы скопировать что-то в буфер обмена достаточно кликнуть по этому объекту правой кнопкой мышки и выбрать пункт « Скопировать » или « Вырезать ». Вставка данных из буфера обмена выполняется аналогично, только с использованием команды « Вставить ».

копирование текста в буфер обмена

Также вы можете использовать комбинации клавиш. Для копирования данных существуют комбинации Ctrl-C и Ctrl-Ins , для вырезания данных Ctrl-X и Shift-Del , и для вставки данных Ctrl-V и Shift-Ins .

Задайте вопрос в комментариях под статьей или на странице «Задать вопрос» и вы обязательно получите ответ.

Недавно у меня появилась возможность выполнить отладку буфера обмена в 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.

Вот как выглядит вызов к SetClipboardData от «Блокнота»:


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


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


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


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


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

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

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

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

Мы рассмотрели, как зарегистрировать просмотр/прослушивание буфера обмена. Теперь посмотрим, как с помощью отладчика определить, какие программы участвуют в этих процессах. Сначала нужно идентифицировать процесс в сессии, где мы хотим проверить мониторинг буфера обмена. Это может быть любой процесс win32 в этой сессии — он нужен нам просто для того, чтобы найти указатель на Window Station. В этом случае я бы использовал окно «Блокнота», как и раньше:


Если вы делаете это в процессе отладки ядра, то понадобится интерактивно сменить контекст (используя .process /I<address> , затем нажать g и подождать, пока отладчик прорвётся назад). Теперь запускаем DT на адрес процесса как _EPROCESS , и смотрим на поле Win32Process:


Далее посмотрим адрес 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 об этом.

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

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

ControlC — это маленькая утилита, которая дает возможность создать на основе фрагментов в буфере обмена резервное хранилище данных. Во время ее работы все, что попадает в «клипборд», сохраняется в безопасной, зашифрованной базе данных. База хранится локально, но для доступа к ней используется браузер. База защищена паролем, который нужно придумать при первом запуске программы. На странице, которая генерируется программой, можно увидеть не только содержимое самих фрагментов, но и метаданные: название приложения, откуда данные были скопированы, время, а для файлов — еще и путь, размер и разрешение (для графики).


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

Все метаданные, сохраненные в ControlC, можно использовать для поиска информации. Также доступна возможность определять время хранения фрагментов. Оно отдельно указывается для текста и графики, а для изображений еще и можно указать максимальный размер для файлов, которые будут сохраняться. В черном списке можно указать приложения, в которых ControlC не должна работать.


Часто буфер обмена активно используется во время обсуждения общих проектов с коллегами: через него обязательно проходят фрагменты кода или иные данные по пути из редактора в почтовый клиент или в IM-мессенджер. Веб-сервис Pastebin создан специально для того, чтобы данные из буфера обмена быстро становились доступными другим людям. На главной странице сайта есть поле для вставки данных из буфера. Автор фрагмента может определиться со временем его хранения на сервере (от 10 минут до бесконечности), а также с правами доступа к нему.


Pastebin предлагает плагины для многих популярных браузеров и клиенты для мобильных платформ. Кроме этого, доступны файлы для разворачивания сервиса на локальном сервере.

Буфер обмена часто используется для передачи данных между приложениями (из браузера — в органайзер заметок, из почтового клиента — в текстовый редактор и так далее). Но он может быть не менее полезным, если использовать его для обмена данными между компьютерами в локальной сети. Такое использование буфера обмена может стать интересной альтернативой IM-клиентам или сетевому чату.


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

Для синхронизации буфера обмена можно использовать ClipSync. Эта бесплатная программа состоит из двух частей: клиентского приложения для устройств с Android и Windows-сервера. Программа для Windows устанавливается первой, затем — приложение для Android. Оно сканирует сеть (для связи используется Wi-Fi) и подключается к серверу. Если автоматически подключиться не удалось, можно ввести IP-адрес компьютера-сервера вручную. Для удобства эти данные отображаются при щелчке по значку ClipSync в системном трее. После установки соединения все данные, которые заносятся в буфер обмена Windows, автоматически становятся доступными на смартфоне или на планшете.


Для работы с ними нужно в течение некоторого времени удерживать палец на любом поле для ввода и выбрать пункт Paste. И точно так же текст, скопированный на Android-аппарате, сразу же становится доступен для вставки на компьютере или на ноутбуке. При этом число устройств с синхронизируемым буфером обмена не ограничено — главное, чтобы они все находились в одной подсети.

А вот еще одна интересная задача, которую можно реализовать с использованием буфера обмена и специализированной программы. Бывает, что текст из буфера требуется сохранить в файл. Для этого нужно открывать «Блокнот» или другую программу, вставлять в нее текст, после чего указывать название файла и выбирать папку для сохранения. Все это можно сделать намного проще, используя программу PasteAsFile. Просто перейдите к папке, в которой должен быть сохранен файл, щелкните по ней правой кнопкой мыши и выберите в контекстном меню пункт Paste As File.


В небольшом окошке можно указать название файла. По умолчанию оно состоит из слова clipboard и текущей даты, но шаблон можно поменять. Также в окошке выбирается формат файла. Данные могут сохраняться в TXT, HTML и в PDF. В настройках утилиты можно найти команду конвертирования текста в Javascript и PHP, есть также включение поддержки RTF и возможность автоматической очистки буфера обмена после сохранения файла.

Наверное, всем известен самый простой способ очистки текста от форматирования: скопировать его в буфер обмена, затем вставить в «Блокнот» или в подобное приложение, снова скопировать и теперь уже вставить именно туда, куда нужно. Число действий можно уменьшить, если использовать менеджер буфера обмена, поддерживающий автоматическую очистку от форматирования.

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


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

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

CLCL — это одна из самых простых, но в то же время самых удобных программ для работы с буфером обмена. Ее важнейшая особенность — вставка сохранённых фрагментов без лишних действий. Вставлять текст из CLCL так же просто, как и из стандартного буфера обмена.

CLCL хранит столько последних фрагментов, сколько скажет пользователь (по умолчанию 30). Чтобы увидеть их, нужно нажать сочетание клавиш ALT+C. При этом на экране возникает меню со всеми сохраненными данными. Напротив каждого фрагмента есть число. Нажмите соответствующую клавишу на клавиатуре, и фрагмент будет вставлен. Для вставки также можно использовать щелчок мышью и клавишу Enter.


Чтобы не хранить лишний мусор, CLCL может автоматически проверять все вновь добавляемые данные на дубликаты. Действительно, если фрагмент уже есть в базе, то зачем его добавлять вторично?

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

В MS Word есть одна очень полезная функция работы с буфером обмена — «Вставить все». Можно добавлять в него фрагменты из разных документов, а затем одним махом вставить сразу в один файл. Жаль только, что такая вставка возможна только в документ Word, да и работает буфер обмена Office только тогда, когда текстовый редактор запущен.

Реализовать простой сбор данных и последующее сохранение их в одном месте поможет программа ClipDiary. Она автоматически сохраняет все, что копируется в буфер обмена. Далее можно выделить нужные клипы в списке и воспользоваться функцией «Множественная вставка» (вызывается клавишей F6). Между отдельными фрагментами может использоваться разделитель: пустые строки или любые символы.


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


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

Если мы постоянно обращаемся к буферу обмена, то почему бы не сделать работу с ним немного удобнее? Если в буфере будет сохраняться хотя бы 5-10 последних фрагментов, возможно, не придется снова возвращаться к уже закрытой веб-странице и копировать то, что вы уже копировали, но случайно потеряли. Если использовать функцию множественной вставки, не придется каждый раз после копирования текста из источника переходить к файлу-получателю, чтобы вставить в него текст, а затем снова возвращаться к источнику. Если устранение форматирования будет выполняться автоматически, это тоже сэкономит лишние минуты, которые за долгие годы работы превратятся в часы. Поэтому работайте эффективнее — и тогда будете успевать больше!

В операционных системах Windows, Mac OS или Андроид пользователям компьютера и Интернета была предоставлена возможность работать одновременно в нескольких окнах с несколькими программами.

У пользователей сразу же возник соблазн передачи данных из одних программ (из одних окон) в другие программы (в другие окна).

Действительно, имеешь, например, подходящий текст в формате Блокнота (скажем, с расширением .txt), и это текст вполне пригоден, чтобы его вставить в подготавливаемую презентацию (скажем, в формате PowerPoint). Не перепечатывать же его заново?! Текст уже есть, но в другом формате и в другом окне, в другой программе. Так и хочется его каким-то образом автоматически перенести в другое окно, в другую программу.

Или, например, пользователь ПК сделал фотографию и сохранил ее в формате (например, с расширением .jpg). И теперь надо эту фотку вставить в виде рисунка, например, в текст Word, чтобы «украсить» текст, сделать «книжку с картинками». Подобных примеров, когда есть желание перенести данные из одной программы (из одного окна) в другую программу (в другое окно) можно привести множество. А если есть желания, то должны быть и соответствующие возможности.

Как сделать так, чтобы можно было из одной программы в другую переносить совершенно любые данные: тексты, картинки, графику, чертежи, схемы и даже видео или аудио и пр.?

Что такое Буфер обмена

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

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

Кстати, процедура копи-паст работает также в пределах одного окна, одной программы, если данные нужно копировать из одного места и вставить в другое место текста, презентации и т.п.

Благодаря внешней простоте подобной процедуры переноса данных из одного окна в другое, эта процедура получила жаргонное наименование «копи-паст». Слово «копипаст» произошло от двух английских слов «copy-paste», что в переводе означает «копировать-вставить».

Специальная область, в которую данные сначала копируются, а потом оттуда восстанавливаются (вставляются), получила название «буфер обмена» (по-английски «clipboard», переводится так же – «буфер обмена»).

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

Операции «Копировать» или «Вырезать», а потом «Вставить» и связанный с этими операциями буфер обмена являются стандартными функциями операционных систем Windows, Mac OS или Андроид.

что такое буфер обмена

Схема работы буфера обмена в Windows, Mac, Android

Как правило, в буфер обмена информация попадает, когда пользователь использует одну из двух операций:

  1. «Копировать» (горячие клавиши Ctrl+C) или
  2. «Вырезать» (Ctrl+X).

А из буфера обмена пользователь извлекает информацию с помощью операции «Вставить» (Ctrl+V).

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

Стандартный буфер обмена как часть оперативной памяти способен сам себя очищать, например, при выключении компьютера или при помещении туда новой информации.

Операции буфера обмена «Копировать» и «Вставить»

Многие программы имеют в своем арсенале возможностей пункты меню и кнопки «Копировать» («Copy»), а также пункты меню и кнопки «Вставить» («Paste»).

Как правило, из-за частого применения этих пунктов, данные пункты меню находятся чаще всего в самом главном меню программ, а кнопки «Копировать» («Copy») и «Вставить» («Paste») могут иметь довольно большой размер и могут быть хорошо заметными (рис. 1).

Кнопки Вставить и Копировать в Word

Рис. 1. Кнопки «Вставить» и «Копировать» в программе Microsoft Word

1 на рис. 1 – кнопка «Копировать» в программе Word, которая будет активна только в том случае, когда выделен текст (или картинка), и, следовательно, есть объект для копирования и помещения его в буфер обмена,
2 на рис. 1 – кнопка «Вставить».

Многие контекстные меню, которые появляются при щелчке правой кнопкой мыши (ПКМ) по выделенному фрагменту документа (текст, рисунок и т.п.) имеют опции «Копировать» и «Вставить», поскольку это часто применяемые действия пользователей ПК при работе с программами (рис. 2).

контекстное меню Копировать и Параметры вставки в Word

Рис. 2. Пункты контекстного меню «Копировать» и «Параметры вставки» в программе Microsoft Word

Заменой кнопок «Копировать» и «Вставить» (1 и 2 на рис. 1) являются пункты контекстного меню точно с такими же названиями (1 и 2 на рис. 2).

Все ли так просто?

Чаще всего пользователь применяет копирование и вставку для переноса данных из одного места программы в другое место или из одной программы в другую, даже не задумываясь, как это делается. И почти в 100% случаев получается адекватный результат: данные из одной программы переносятся без искажений в другую программу или из одного места они переходят в другое в пределах одной программы.

Но могут быть и исключения. И тогда применение буфера обмена может привести к искажению данных, если неправильно пользоваться предоставленными возможностями. Это случается редко, но все-таки может случиться. Разберем примеры «искажения» данных, а точнее, примеры неправильной работы с буфером обмена.

Буфер обмена или буфер обмана на примере Excel

Пользователи электронных таблиц Excel знают, что в ячейках программы Excel могут храниться не только цифры, но и формулы для их вычисления. А в самих ячейках высвечиваются данные, полученные в результате вычислений по этим формулам. Теперь представьте себе, что мы ставим курсор в такую ячейку с формулой, жмем «Копировать» и данные помещаем в буфер обмена.

Затем ставим курсор в другую свободную ячейку и жмем «Вставить». Что должно попасть в эту свободную ячейку? Формула, которая стояла в прежней ячейке, из которой мы копировали данные в буфер обмена? Или число, которое стояло в прежней ячейке? Если формула, то результат вставки будет один (вставленная формула сработает, и в ячейке появится число, являющееся результатом вычисления по этой формуле). Если же вставится число, то результат вставки – это число, полностью равное тому, которое стояло в ячейке, из которой производилось копирование.

Понятно, что в итоге в новой ячейке мы можем увидеть либо одно число (если вставилась формула), либо другое (если вставилось число). Значит, мы можем получить как «правильный», так и «неправильный» результат. То есть мы или получим точный ответ из буфера обмена, или получим неточный ответ уже из «буфера обмана»!

Как не ошибиться? Надо знать, ЧТО по умолчанию вставляется из буфера обмена в той или иной программе. Именно знать. Для этого надо про это где-то прочитать (в справке к программе, например), или поэкспериментировать самостоятельно. Если не знать, то можно получить неверные данные, опираясь на возможности уже не буфера обмена, а «буфера обмана»!

В приведенном примере с программой Excel опытные пользователи этой программы знают, что по умолчанию в ячейку вставляется формула, а не значение. Если же нужно из буфера обмена вставить все-таки значение, а не формулу, то надо пользоваться дополнительным меню вставки, и выбирать из него «Вставить значение» (цифра 1 на рис. 3) или воспользоваться «Специальной вставкой» (цифра 2 на рис. 3 и рис. 4):

Excel Вставить значение в новую ячейку или использование Специальной вставки

Рис. 3. Вставка значения в новую ячейку (вместо формулы) (цифра 1) или использование «Специальной вставки» (цифра 2)

Excel Специальная вставка

Рис. 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.

Excel буфер обмена

Рис. 5. Буфер обмена в Excel

Подробнее про буфер обмена для офиса 2010, в частности, про его включение и отключение, про настройку его видимости, информация с официального сайта на русском языке:

Официальный сайт Microsoft на русском языке о буфере обмена для Office 2013 и 2016:

Программа «Буфер обмена» в MS Office иначе еще называют менеджером буфера обмена. Есть и другие специальные программы для операционных систем, называемые менеджерами буфера обмена, которые предназначены для расширения возможностей стандартного буфера обмена.

Возвращаясь к стандартным возможностям обычного буфера обмена, который есть в Windows, Mac OS или Андроид, отметим, что в нем сохраняются последние данные, которые туда были скопированы.

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

Таким образом, при необходимости многократного использования стандартного буфера обмена нужно после каждой операции «Копировать» сразу же использовать операцию «Вставить». Многократно подряд скопировать, и потом многократно подряд вставить (даже если это кажется более удобным вариантом работы), пользуясь стандартными возможностями буфера обмена, нельзя.

Буфер обмена в Word

Специальные вставки есть не только в довольно сложной и многофункциональной программе Excel, но и в том же Ворде (рис. 6), а также во многих других программах. И об этом надо помнить, если активно пользоваться буфером обмена, чтобы он не превратился в итоге в «буфер обмана».

Меню Вставить в Word

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

Рис. 6.2. Специальная вставка из буфера обмена в программе Microsoft Word

Вставить данные можно напрямую, без буфера обмена

И еще хотелось бы отметить следующее. Вставлять данные в программы можно не только из буфера обмена. Картинки можно вставлять из файлов, тексты можно тоже вставлять из файлов, в таблицы можно вставлять графики и диаграммы и многое-многое другое. Здесь уже буфер обмена не при чем! И меню «Вставка» в том же Ворде (рис. 7) тоже не имеет не малейшего отношения к вставке данных из буфера обмена, хоть это меню записывается одинаково с наименованием кнопки «Вставить», предназначенной для вставки из буфера обмена.

Вставка в Word НЕ из буфера обмена

Рис. 7. Меню «Вставка» программы Microsoft Word, НЕ имеющее отношения к вставке из буфера обмена

На рис. 7 видно, что в Word в меню «Вставка», которое НЕ связано с буфером обмена, входят:

  • страницы,
  • таблицы,
  • рисунок,
  • клип,
  • диаграммы,
  • колонтитулы,
  • надписи,
  • символы
  • и т.д.

Таким образом, пользуясь буфером обмена, пользователь ПК может вставлять данные, ранее скопированные туда из другого места той же программы или из другой программы. И это никак не связано с другими возможностями вставки других данных, которых, как видим, тоже немало.

Что значит «Буфер обмена содержит большой фрагмент»?

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

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

буфер обмена переполнен

Рис. 8. Предупреждение, что в буфере обмена остался большой объем информации.

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

1 на рис. 8 – если нажать «Да», тогда данные останутся в буфере обмена, программа Word будет закрыта.
2 на рис. 8 – клик по «Нет», данные будут удалены из буфера обмена, Word будет закрыт.
3 на рис. 8 – если щелкнуть «Отмена», тогда ничего не изменится, ибо пользователь передумал очищать буфер обмена и закрывать Word.

Решение, какую из трех кнопок выбрать, остается за пользователем.

Если данные из буфера обмена удалить, то их уже нельзя будет вставить в другие программы. А если оставить, то вставить их будет возможно, но при этом на хранение большого объема данных в буфере обмена потребуется много ресурсов ПК. Тут уж пользователь должен определиться, что он хочет: сохранить данные в буфере обмена или сохранить ресурсы оперативной памяти на своем устройстве для дальнейшей работы.

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

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