Как получить буфер обмена вставляют уведомление и обеспечить мои собственные данные?

Для маленькой утилиты я пишу (.NET, C#), я хочу контролировать операции копии буфера обмена и операции вставки буфера обмена.

Моя идея состоит в том, чтобы обеспечить мои собственные данные при вставке в произвольное приложение.

Контроль операции копии может быть легко сделан при помощи программы просмотра буфера обмена.

Что-то, что кажется намного более усовершенствованным мне, должно записать, что "буфер обмена вставляет поставщика":

  • Ответьте на, "какие форматы являются доступными" запросами приложений.
  • Данные по запасам к операциям вставки приложения.

Я нашел эту регистрацию и эту регистрацию, но ни один из них, кажется, действительно не помогает мне.

То, что я предполагаю, - то, что я так или иначе должен подражать/угонять текущему буферу обмена.

Вопрос:

Действительно ли возможно "перенести" буфер обмена с точки зрения операций вставки и обеспечить мой собственный вид "прокси буфера обмена"?

9
задан Community 23 May 2017 в 12:02
поделиться

2 ответа

Вам нужно зацепить крючок буфера обмена с помощью крючка Windows. Перехватчик Windows - это способ перехвата происходящих глобальных событий и предоставление вашей собственной подключаемой процедуры для замены или перехвата сообщения. Взгляните на CodeProject , где объясняется, как подключать.Вот помощник буфера обмена , который прослушивает функции копирования / вставки. Вот шпион буфера обмена , который только и делает это. Вот еще одна статья, которая реализует ловушку Clipboard .

11
ответ дан 4 December 2019 в 09:36
поделиться

Ознакомьтесь с "отложенным рендерингом" в WinAPI. С помощью этой техники вы загружаете буфер обмена с нулевыми дескрипторами, а при вставке windows уведомляет вас сообщением WM_RENDERFORMAT. Именно так такие приложения, как Excel, могут "копировать" 25 различных форматов. На самом деле он не копирует их все. На самом деле он создает некоторые распространенные форматы, такие как TEXT, но "рекламирует" другие, такие как Bitmap, Html, WKS и т.д., предпочитая подождать, пока целевое приложение захочет вставить файл.
Подумайте вот о чем: вы можете выбрать 5000 ячеек в Excel и скопировать их, и буфер обмена обновится довольно быстро. Теперь вставьте в Windows Paint, и внезапно ваша система начнет ползать, пока Excel пытается отобразить огромное растровое изображение. Старые версии обычно аварийно завершали работу после того, как использовали всю доступную память и съедали страничный файл. Однако это было еще во времена Windows 3.1. Современные версии выдают сообщение о "слишком большом растровом изображении" или "недостаточно памяти". Предупреждение: Отложенный рендеринг будет преждевременно запущен приложениями, которые следят за буфером обмена и автоматически вставляют данные в себя, например, Remote Desktop, VMWare, Office Clipboard и мой собственный ClipMate. Некоторым программам мониторинга буфера обмена можно указать игнорировать обновление буфера обмена с помощью флага CF_Clipboard_Viewer_Ignore, который я описал здесь: link text

11
ответ дан 4 December 2019 в 09:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: