Как получить уведомление о вставке в буфер обмена и предоставить свои собственные данные? - PullRequest
9 голосов
/ 19 февраля 2010

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

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

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

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

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

Я обнаружил эта публикация и эта публикация , но, похоже, ни одна из них мне не очень помогает.

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

Вопрос:

Можно ли "обернуть" буфер обмена с помощью операций вставки и предоставить мой собственный тип "прокси буфера обмена"?

Ответы [ 2 ]

11 голосов
/ 13 марта 2010

Посмотрите на «отложенный рендеринг» в WinAPI. С помощью этой техники вы загружаете буфер обмена с нулевыми маркерами, и после вставки окна уведомляют вас сообщением WM_RENDERFORMAT. Вот как приложения, такие как Excel, могут «копировать» 25 различных форматов. Это на самом деле не копирует их всех. На самом деле он создает некоторые распространенные, такие как TEXT, но «рекламирует» другие, такие как Bitmap, Html, WKS и т. Д., Предпочитая подождать, чтобы посмотреть, что целевое приложение хочет вставить.
Учтите это: вы можете выделить 5000 ячеек в Excel и скопировать, и буфер обмена обновляется довольно быстро. Теперь вставьте в Windows Paint, и ваша система внезапно начнет сканировать, когда Excel пытается отобразить огромный растровый рисунок. Старые версии обычно вылетали после использования всей доступной памяти и загрузки файла подкачки. Это было еще в дни Windows 3.1, хотя. Современные версии выдают сообщение о «слишком большом растровом изображении» или «недостаточно памяти». Предупреждение: отложенный рендеринг будет преждевременно запускаться приложениями, которые отслеживают буфер обмена и автоматически вставляют данные в себя, такими как удаленный рабочий стол, VMWare, офисный буфер обмена и мой собственный ClipMate. Некоторым программам мониторинга буфера обмена можно запретить обновление буфера обмена с помощью флага CF_Clipboard_Viewer_Ignore, который я описал здесь: текст ссылки

11 голосов
/ 19 февраля 2010

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

...