Что такое буфер обмена для чего он предназначен
Что такое буфер обмена в компьютере или телефоне и где его найти?
Доброго всем времени на fast-wolker.ru! Многие начинающие пользователи сталкиваются с различными еще неизвестными компьютерными понятиями, что вполне нормально, и пытаются в них разобраться. По сути это и есть компьютерная грамотность.
Многие элементы этих знаний важны, даже несмотря на свою простоту. Одним из таких моментов является понятие «буфера обмена». Что это такое, мы сейчас и рассмотрим.
Что такое буфер обмена и где он находится в компьютере?
Понятие «буфер обмена», в принципе, говорит само за себя. Это такое место в компьютере, куда временно помещаются и хранятся короткое время некоторое время некие данные. Во время работы как с текстовыми файлами, так и с изображениями, (не говоря о сети интернет, мы так или иначе копируем и сохраняем для себя какую-то информацию.
В старые добрые времена, когда не было ни компьютеров, ни принтеров, на которых можно распечатать, то что было сохранено, копировалось и сохранялось все в ручную. Т.е., брали ручку, листок бумаги и переписывали из книг все, что было необходимо, делали вырезки из газет и журналов и наклеивали их в тетради. Сейчас это уже не столь необходимо, хотя может быть, есть некоторые, кто до сих пор сохраняет для себя таким образом всю нужную информацию.
Итак, найдя в тексте нужную информацию или обнаружив нужную картинку, мы нажимаем правой клавишей мыши и в открывшемся меню выбираем надпись «копировать».
В результате эта информация или файл попадают в специальную область компьютера, где будут храниться до тех пор, пока мы не вставим ее в необходимое нам место. Надо заметить, что после выключения компьютера эта информация из буфера обмена автоматически стирается и при повторном включении ее в буфере обмена уже не будет. Поэтому, при выключении своего компьютера убедитесь, что все нужное у вас сохранено.
Область компьютера, в которой храниться временные данные называется «оперативной памятью»(ОЗУ, RAM). У каждой ячейки есть адрес, в который временно помещается информация из буфера обмена, а так же другая служебная информация. Под буфер обмена отводится некий диапазон ячеек ОЗУ.
И еще одно, информация в буфере обмена не накапливается, а заменяется предыдущая на последующую. Например, если вы скопировали сначала один текст, а потом другой, то последний скопированный текст заменит предыдущий и при вставке скопирует именно его.
Но при вставке информации, файла, картинки и прочее, они из буфера обмена не удаляются. Таким образом, вы можете вставлять неограниченное количество раз.
Есть и технические нюансы. Не всякую скопированную информацию можно вставить туда, куда хочется. Например, открыв папку в нее вы вставите только файл, а вот текст вы сможете вставить только в редактор или ворд, или какой-либо другой. Так же как и скопированный текст из интернета. Его можно вставить только в текстовой редактор и никуда более.
При работе с копированием и вставкой можно пользоваться не только клавишами мыши, но и самой клавиатурой. Для этого вам понадобятся следующие комбинации клавиш:
Где же хранится эта скопированная информация? В операционной системе старого образца Windows XP есть специальная программа под названием «Clipbrd.exe». Открыв ее можно узнать, что храниться в буфере обмена этой системы.
Найти программу можно по следующему пути: «C:/Documents and Settings/System 32». Что же касается более поздних версий, таких ка 7 и пр., то такой программы там уже нет, а имеется просто исполняющий файл. Расположен он в папке «C:/ windows/System 32», а там находим файл под именем clip.exe. Если навести на него курсором мыши то можно прочитать его свойства.
Поскольку стандартный буфер обмена сохраняет только одну информацию, заменяя ею предыдущую, а иногда возникает необходимость в сохранении и повторной вставке одной и той же информации, то были разработаны программы для таких целей. Одна из них (Для Windows 7) – утилита Comfort Clipboard.
Эта программа удобна тем, что в ней сохраняется вся скопированная информация, включая текст, папки, файлы и пр. Они уже не заменяют друг друга, а содержатся в ней все. В результате вы сможете выбирать и вставлять что вам нужно и куда нужно.
Что такое буфер обмена в телефоне и где он находится?
В телефоне так же имеется буфер обмена, который играет аналогичную роль, что и в компьютере. Все скопированные файлы хранятся в этом месте до тех пор, пока их не переместили.
Буфер обмена находится в оперативной памяти смартфона. Что бы скопировать и переместить любой файл, достаточно нажать на него и несколько секунд удерживать. Появится надпись «Копировать» или «Переместить». Выбираем нужное, затем вам предложат выбрать место для копирования или перемещения. Выбираете – в основной памяти телефона или же переносите на карту памяти. В результате произойдет процесс копирования.
Проверять буфер обмена и очищать его так же, как и память и ненужные файлы – необходимо. Поскольку телефон, в отличие от компьютера гораздо менее производителен. Что бы добраться до буфера обмена в телефоне надо воспользоваться специальными программами. Одна из них – Clipper. Это довольно простая в использовании утилита.
После установки программы и копировании каких-либо данный, открыв программу во вкладке буфер обмена их можно будет обнаружить.
Эти данные можно как вставлять куда необходимо, так и удалять в любой момент. Вот такие особенности буфера обмена как на компьютере, так и на телефоне. Успехов!
Буфер обмена Android: как его посмотреть, закрепить или удалить оттуда данные
Даже если вы считаете себя опытным пользователем Android, думаю, время от времени вы всё равно сталкиваетесь с понятиями, сути которых либо не понимаете вообще, либо понимаете, но объяснить это посторонним уже не можете. Лаунчер, бутлоадер, буфер обмена – всё это терминология, которая в лексиконе большинства пользователей в принципе отсутствует. Другое дело, что мы ежедневно сталкиваемся с этими явлениями и просто не подозреваем об этом. Но если о лаунчерах мы уже рассказывали, о бутлоадерах – расскажем как-нибудь потом, то вот буфер обмена обходить стороной точно не будем.
Буфер обмена — это более функциональный элемент ОС, чем вы думали
Буфер обмена – это особый сегмент операционной системы, который выступает в роли временного хранилища данных, куда они попадают после того, как вы нажимаете кнопку «Копировать». Предполагается, что он взаимосвязан с оперативной памятью и способен хранить информацию только до первой перезагрузки, но это не совсем так. Помимо той информации, которую вы скопировали прямо сейчас, там могут хранить и другие сведения, скопированные ранее. По умолчанию новые данные, конечно, заменяют старые, но и их можно оставить там надолго.
Как просмотреть буфер обмена на Android
Небольшой дисклеймер: всё, что описано ниже, касается клавиатуры Gboard от Google. Если вы пользуетесь другой, можете скачать Gboard по этой ссылке, а, если не хотите менять, то не переживайте – получить доступ к буферу обмена на других клавиатурах можно примерно таким же образом. Лично я не думаю, что разные разработчики компонуют их как-то иначе.
Когда вы копируете текст, он попадает в буфер обмена
Чтобы отправить текст в буфер обмена, вам потребуется выполнить два простых действия: откройте любой текст и выделите его, а затем в выпадающем меню нажмите «Копировать». Теперь текст будет перенесён в буфер обмена, откуда его потом можно будет вставить куда угодно.
Данные в буфере обмена можно закрепить, чтобы пользоваться ими в будущем
Чтобы проверить, что в данный момент хранится в буфере обмена, вам потребуется вызвать клавиатуру. Если вы в браузере просто нажмите на адресную строку, и клавиатура появится автоматически. В верхней части найдите иконку списка и нажмите на него – это и есть буфер обмена.
Как удалить текст из буфера обмена
Там вы увидите свой текст, который скопировали ранее. Тут вы можете удалить его или закрепить, если, например, хотите иметь быстрый доступ к той или иной информации, которой вам часто приходится с кем-то делиться. Это могут быть номера телефонов, адреса или ваши паспортные данные. Для этого нажмите пальцем на фрагмент и удерживайте в течение полутора секунд. В выпадающем окне выберите «Удалить» или «Закрепить» в зависимости от того, что вам нужно.
Данные из буфера обмена не удаляются после перезагрузки, поэтому иногда имеет смысл удалять их вручную
Если вы выберете «Удалить», фрагмент текста навсегда исчезнет из буфера обмена и восстановить его уже будет невозможно. А вот если вы нажмёте «Закрепить», то в буфере появится два подраздела: Недавние и Закреплённые. Первый будет включать в себя те данные, которые вы скопировали только что, а второй – те, которые вы закрепили для быстрого доступа на потом.
Данные, которые попали в буфер обмена, хранятся там даже после перезагрузки устройства. Поэтому никакой связи с оперативной памятью здесь нет. Более того, закреплённые фрагменты текста хранятся там вообще бесконечно. Поэтому, если вы таким образом храните какую-то чувствительную информацию, рекомендуется беречь смартфон в тайне от других либо удалять сохранённые сведения по мере потери их актуальности.
Буфер обмена что это и где находится
Буфером обмена называют логическое хранилище информации, которое используется между программами и интерфейсами для обмена некоторыми данными при помощи особых функций: «Вставить», «Вырезать», «Копировать». В этой статье вы узнаете более подробно, что такое буфер обмена, а также где он находится в вашем ПК.
Важно помнить, что буфер обмена очень ненадежное и временное хранилище данных. Поэтому при копировании важной информации не забывайте вставлять данные в новое место.
Что такое буфер обмена
По сути, буфер обмена — это участок памяти. В нем сохраняется на время (пока мы не скопируем следующий файл) определенный файл, папка, участок текста, для вставки его в другой документ или место на диске.
После того, как мы нажали на функцию в контекстном меню «Копировать», скопированную информацию можно вставить по всюду, где это возможно бесконечное число раз. Эта информация удалиться в том случае, если вы скопируете другой файл. Второй способ чистки буфера обмена — перезагрузка операционной системы Windows.
Таким образом, скопированная информация хранится на компьютере неограниченное количество времени с условием, что компьютер не будет перезагружен и не будет скопирована другая информация. Поэтому обращайтесь внимательней со скопированной важной информацией.
Место нахождения буфера обмена в Windows XP
Если вы хотите наблюдать то, что находится на данный момент в буфере обмена в ОС Windows XP, выполните следующие действия:
Если вам удобнее работать через строку «Выполнить», откройте ее нажатием «Win» + «R», введите команду «clipbrd.exe», а потом нажмите «Enter».
Местонахождение буфера обмена в Windows XP.
Таким образом это и есть то место, где хранится буфер обмена, им выступает системная утилита «clipbrd.exe». Если вы совершите проверку без копирования текста, возможно, что буфер не будет иметь никакой информации. В этом случае вы не получите никакого результата. Узнать, где находится буфер обмена в телефоне можно на сайте Sdelaicomp.ru.
Хранение информации в Windows 7, Vista
Программа, которая есть в Windows XP, в Windows 7 и Windows Vista отсутствует. Правильнее будет сказать, что она есть, но она вам не выдаст никакой информации и она не запускается, как любая другая программа.
Clip.exe хранит всю информацию, которую вы копируете в буфер обмена. Нам доступна только информация, что этот файл хранит скопированные файлы. Существуют специальные программы сторонних разработчиков, которые предоставляют более широкие возможности и настройку копирования, например рассмотренная нами ранее программа Clipdiary.
Буфер обмена в Windows 7, Vista.
Журнал буфера обмена в Windows 10
В операционной системе Виндовс 10 существует возможность использовать специальный журнал буфера обмена. В новой ОС можно сохранять несколько элементов в буфер для удобной работы. Для этого нужно нажать комбинацию клавиш «Win» + «V», после этого вы сможете просматривать журнал буфера обмена и вставлять сохраненное из него в нужные места.
Еще важным дополнением является возможность не только просматривать буфер обмена и вставлять сохраненный элемент, но и активировать синхронизацию с несколькими устройствами. При включении этой функции вы сможете синхронизировать данные из буфера обмена между своими устройствами.
CLCL — программа для удобной работы с буфером обмена
Первая программа, которая доступна для пользователей — CLCL. Это приложение не требует установки на компьютер.
Среди возможностей CLCL обратите внимание на следующие функции:
Как только вы нажмете на рабочем столе иконку программы, система свернет ее в трей, это рабочее место утилиты. Нажав на пиктограмму в трее (области уведомлений), вы развернете рабочее окно приложения и сможете увидеть все файлы, которые были вами скопированы ранее, а также настроить копирование и другие функции программы.
Программа для работы с буфером обмена CLCL.
Comfort Clipboard — менеджер функции копирования
Для пока еще достаточно популярной версии Windows 7 есть специальная утилита для работы с копированием — Comfort Clipboard. Приложение поддерживает работу в операционных системах Windows 10, Windows 8.1, Windows 8.
Эта программа предоставляет пользователям следующие функции:
Программа для работы с буфером обмена Comfort Clipboard.
Программа имеет поддержку популярных языков, различные темы для настройки интерфейса, поддержка истории копирования. Comfort Clipboard Pro доступна в качестве однопользовательской лицензии за 990 рублей.
Punto Switcher — программа для сохранения файлов и текста
Еще один менеджер для ОС Windows, который имеет более широкую настройку, чем предыдущие программы и работает во всех версиях Windows. Вы можете копировать до 30 фрагментов и файлов, которые после этого доступны через историю действий программы. Программа также позволяет сохранять файлы и фрагменты текста даже после перезагрузки системы или при настройке некоторых пунктов меню.
Для этого выполните настройку приложения:
Окно настройки Punto Switcher.
На сегодняшний день ПО доступно для некоммерческого использования. Программа принадлежит компании Яндекс.
Чистка буфера обмена
В большинстве случаев, как уже было сказано, буфер обмена чистить не нужно. Он будет очищен после перезагрузки компьютера или будет заменен при копировании следующего файла.
При копировании информации она временно хранится не на жестком диске, а в оперативной памяти, этим и объясняется исчезновение скопированных файлов после перезагрузки (оперативная память полностью стирается при отключении компьютера от питания).
Но бывают случаи, когда скопированы были большие файлы, например, папка с фотографиями или видеороликами. В этом случае память сильно нагружается и при эксплуатации ресурсоемких программ или игр, компьютер может не справиться с поставленной задачей (так как оперативная память заполнена), а в некоторых случаях даже зависнуть.
Чтобы это предотвратить, необходимо очистить буфер обмена одним из двух способов:
Горячие клавиши при работе с текстом
При работе с текстом очень удобно использовать горячие клавиши. Функция «Вырезать» действует как «удалить» + «копировать», то есть слово или файл, который вы вырежете, пропадет из текущего документа и поместится в буфер обмена.
Использование меню Проводника Windows для работы с буфером обмена.
Основные способы копирования или вставки информации в Windows:
Вот мы и ответили на вопрос, что же такое буфер обмена и где он находится на вашем ПК.
Выводы статьи
Работая за компьютером, пользователи часто сталкиваются с необходимостью копирования или вставки информации, которую необходимо переместить в документах или программах. В операционной системе Windows эту роль выполняет буфер обмена. Пользователи могут использовать встроенные функции системного инструмента или воспользоваться услугами стороннего программного обеспечения — специальными приложениями для работы с буфером обмена.
Сведения о буфере обмена
Буфер обмена — это набор функций и сообщений, которые позволяют приложениям передавать данные. Поскольку все приложения имеют доступ к буферу обмена, данные могут легко передаваться между приложениями или в приложении.
Буфер обмена управляется пользователем. Окно должно передавать данные в буфер обмена или из него только в ответ на команду от пользователя. Окно не должно использовать буфер обмена для перемещения данных без ведома пользователя.
В этом разделе рассматриваются следующие вопросы:
Команды буфера обмена
Пользователь обычно выполняет операции с буфером обмена, выбирая команды из меню » Правка » приложения. Ниже приведено краткое описание стандартных команд буфера обмена.
Порядковый номер буфера обмена
Средства просмотра буфера обмена
Средство просмотра буфера обмена — это окно, в котором отображается текущее содержимое буфера обмена. Окно просмотра буфера обмена является удобным для пользователя и не влияет на функции транзакций с данными в буфере обмена.
Как правило, окно просмотра буфера обмена может отображать по крайней мере три наиболее распространенных формата: _ текст CF, _ точечный рисунок CF и CF _ метафилепикт. Если окно не делает данные доступными ни в одном из этих трех форматов, они должны предоставлять данные в формате вывода или использовать формат, отображаемый владельцем.
Цепочка средства просмотра буфера обмена — это связь между двумя или более сущностями, чтобы они зависели друг от друга для операции. Эта зависимость (цепочка) позволяет всем работающим приложениям просмотра буфера обмена принимать сообщения, отправленные в текущий буфер обмена.
В этом разделе рассматриваются следующие темы.
Средство просмотра буфера обмена Windows
Каждое окно средства просмотра буфера обмена должно вести отслеживание следующего окна в цепочке окна просмотра буфера обмена. При изменении содержимого буфера обмена система отправляет сообщение WM _ дравклипбоард в первое окно в цепочке. После обновления экрана каждое окно просмотра буфера обмена должно передать это сообщение в следующее окно в цепочке.
Форматы отображения
Формат представления — это формат буфера обмена, используемый для вывода сведений в окне средства просмотра буфера обмена. Владелец буфера обмена, использующий формат закрытого или зарегистрированного буфера обмена, и ни один из наиболее распространенных стандартных форматов, должен предоставить данные в формате отображения для просмотра в окне просмотра буфера обмена. Форматы отображения предназначены только для просмотра и не должны вставляться в документ.
Поддерживаются четыре формата вывода: CF _ дспбитмап, CF _ Дспметафилепикт, CF _ дсптекст и CF _ дспенхметафиле. Эти форматы отображения отображаются так же, как стандартные форматы: _ точечный рисунок CF, _ текст CF, CF _ метафилепикт и CF _ енхметафиле.
Формат просмотра владельца
Для владельца буфера обмена, который не использует обычные стандартные форматы буфера обмена, альтернативой формату представления является использование формата буфера обмена Owner-дисплея (CF _ овнердисплай).
Используя формат отображения «владелец», владелец буфера обмена может избежать издержек на отрисовку данных в дополнительном формате, используя прямое управление рисованием окна просмотра буфера обмена. Окно просмотра буфера обмена отправляет сообщения владельцу буфера обмена при необходимости перерисовки части окна или при прокрутке или изменении размера окна.
Как работает буфер обмена в Windows
Недавно у меня появилась возможность выполнить отладку буфера обмена в Windows, и я решил, что хорошо бы поделиться информацией, которую удалось узнать. Буфер обмена — это тот компонент Windows, который многие из нас используют десятки (сотни?) раз в день, особо не размышляя об этом. Прежде чем взяться за это дело, я даже никогда не задумывался, как всё устроено. Как выяснилось, там столько интересного, что вы даже не можете себе представить. Сначала опишу, как приложения хранят разные типы данных в буфере обмена и как извлекают их оттуда, а затем — как приложения могут «прицепиться» к буферу и отслеживать изменения в нём. В обоих случае вы увидите отладочные записи, которые показывают, как получить доступ к данным из отладчика.
Начнём с обсуждения форматов буфера обмена. Такие форматы используются для описания, какие типы данные можно поместить в буфер. Там есть некоторое количество предопределённых стандартных форматов, которые может использовать приложение, вроде битового массива, текста ANSI, текста в Юникоде и TIFF. Windows также позволяет приложению установить собственный формат. Например, текстовый процессор может зарегистрировать формат, включающий в себя текст, форматирование и картинки. Конечно, это ведёт к определённой проблеме: что произойдёт, если вы скопируете данные из текстового редактора и вставите их в «Блокнот», который не понимает всего этого форматирования и не отображает картинки?
Выход — разрешить одновременное хранение данных в буфере обмена в нескольких форматах. Когда я раньше думал о буфере обмена, то представлял, что там хранится единственный объект («мой текст» или «моя картинка»), но на самом деле мои данные хранятся в буфере в разных формах. Программа, которая берёт информацию из буфера, получает её в том формате, который она может использовать.
Как же данные появляются в буфере обмена? Очень просто, приложение сначала объявляет о праве собственности на буфер обмена через функцию OpenClipboard. После этого программа может очистить буфер обмена командой EmptyClipboard и, наконец, поместить туда свои данные командой SetClipboardData. SetClipboardData принимает два параметра. Первый — это идентификатор одного из форматов буфера обмена, которые мы упоминали выше. Второй — дескриптор сегмента в памяти, который содержит данные в этом формате. Приложение может неоднократно вызывать команду SetClipboardData для каждого из форматов, какие она хочет поместить в буфер, от лучшего к худшему (поскольку то приложение, куда будут вставляться данные, выберет первый подходящий формат из списка). Чтобы облегчить жизнь разработчику, Windows автоматически обеспечивает конвертацию некоторых типов форматов для буфера обмена. По окончании процесса программа вызывает CloseClipboard.
Когда пользователь нажимает кнопку «Вставить», целевое приложение вызывает OpenClipboard и одну из следующих функций для определения доступных форматов данных: IsClipboardFormatAvailable, GetPriorityClipboardFormat или EnumClipboardFormats. Если оно находит подходящий формат, то тогда вызывает GetClipboardData с идентификатором нужного формата в качестве параметра, чтобы получить данные. В конце приложение использует команду CloseClipboard для закрытия буфера.
Вот как выглядит вызов к SetClipboardData от «Блокнота»:
Итак, теперь мы можем просмотреть содержимое RDI как tagCLIP и увидеть, что записано в буфер:
aheList в gSharedInfo содержит массив с дескрипторами, и последние два байта hData, умноженные на размер записи дескриптора, показывают адрес записи нашего дескриптора:
Если посмотреть phead со смещением 14, то мы получим наши данные (это смещение может отличаться на разных платформах):
Представим другой сценарий. Я скопировал какой-то текст из 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.
Мы рассмотрели, как зарегистрировать просмотр/прослушивание буфера обмена. Теперь посмотрим, как с помощью отладчика определить, какие программы участвуют в этих процессах. Сначала нужно идентифицировать процесс в сессии, где мы хотим проверить мониторинг буфера обмена. Это может быть любой процесс win32 в этой сессии — он нужен нам просто для того, чтобы найти указатель на Window Station. В этом случае я бы использовал окно «Блокнота», как и раньше:
Далее посмотрим адрес Win32Process как win32k!tagPROCESSINFO и узнаем значение rpwinsta:
Это наша Window Station. Сливаем содержимое через dt:
Обратите внимание на поля spwndClipViewer, spwndClipboardListener и spwndClipOwnerfields. Здесь spwndClipViewer — это последнее зарегистрированное окно в цепочке тех, кто просматривает буфер обмена. Также spwndClipboardListener — последнее зарегистрированное окно прослушивания буфера в списке Clipboard Format Listener. Окно spwndClipOwner — это то окно, которое разместило данные в буфере обмена.
Ели мы знаем окно, то осталось несколько шагов, чтобы узнать, к какому процессу оно относится. Нас интересуют forspwndClipViewer, spwndClipboardListener и spwndClipOwner. Сначала запускаем dt, чтобы узнать значение tagWND. Для этой демонстрации мы используем spwndClipViewer:
Нас интересует только значение head — так что если смещение 0, делаем dt для того же адреса на _THRDESKHEAD:
Теперь запускаем dt для адреса, указанного в поле pti как tagTHREADINFO:
Как видим, просмотр буфера обмена зарегистрировн от имени процесса viewer02.exe. Поскольку просмотр идёт по цепочке, определить следующий процесс в цепочке будет непросто. Но мы можем сделать это для тех, кто прослушивает буфер. Снова взглянем на нашу Window Station:
Если запустить dt на spwndClipboardListener, то увидим поле spwndClipboardListenerNext с указанием следующего прослушивающего процесса:
При достижении последнего процесса в списке прослушивающих буфер tagWND, значение его поля spwndClipboardListenerNext будет нулевым:
Используя адрес окна, мы можем тем же методом добраться до названия процесса. Как упоминалось ранее, поскольку tagWND — это структура ядра, ОС сама хранит указатели spwndClipboardListener/spwndClipboardListenerNext, так что они не могут привести к таким проблемам с отслеживанием буфера, как цепочки просмотра.
На этом заканчивается наш обзор буфера обмена Windows. Надеюсь, для вас он стал информативным. Хотите узнать больше о мониторинге буфера обмена? Вот хорошая статья MSDN об этом.