2016-12-21 13 views
0

Нам нужно скопировать и повторно отправить то, что находится в буфере обмена - все форматы. Есть ли способ сделать это?Как скопировать все (все форматы) буфера обмена

Вот пример использования. У нас есть небольшие документы docx/pptx/xlsx, которые в нашем Office AddIn мы хотим, чтобы пользователь перетащил/переместил в word/ppt/xl. К сожалению, наилучшим документированным форматом для этого является html, который не так близок к фактическому docx/pptx/xlsx.

Итак, я думал, что мы (используя Word в качестве примера) создаем экземпляр объекта Word Document (наш код является Word AddIn, поэтому по определению Word работает). Затем мы вызываем этот объект Document, чтобы выбрать все его, а затем вставить выделение.

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

Если мы сможем скопировать все содержимое буфера обмена в наш объект, который реализует IDataObject и передает этот объект Control.DoDragDrop(), тогда, когда пользователь бросает его где-то в Word, он передает его в Word в недокументированный формат, который имеет все форматирование docx.

Есть ли способ сделать это?

Обновление: Нам нужно перетащить/удалить содержимое файла (а не только текст, полностью отформатированный текст, таблицы, фигуры, диаграммы и т. Д.).

Обновление 2: Мы должны передать это как IDataObject в DoDragDrop(), а не вставить из буфера обмена. Мы делаем не, но мы должны знать, когда это произойдет, потому что мы передали IDataObject для Windows и Windows.

+0

«У нас есть небольшие документы docx/pptx/xlsx, которые в нашем Office AddIn мы хотим, чтобы пользователь перетащил/переместил в word/ppt/xl» - просто чтобы уточнить, вы хотите иметь возможность вставлять документ * текст * (и форматирование) в эти программы? Или вы хотите разрешить им перетаскивать документ * файл * в эти программы? – Quantic

+0

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

+0

@Quantic - содержимое (текст, таблицы, фигуры и т. Д.) –

ответ

0

Получается, что есть вызов для этого - Clipboard.GetDataObject().