Я хочу написать формат Html, но не могу заставить работать даже простой пример MSDN.
http://msdn.microsoft.com/en-us/library/tbfb3z56.aspx
Работает ли это консольное приложение, представляющее собой буфер обмена, для кого-нибудь?
using System;
using System.Windows; //Need to add a PresentationCore or System.Windows.Forms reference
class Program {
[STAThread]
static void Main( string[] args ) {
Console.WriteLine( "Copy a small amount of text from a browser, then press enter." );
Console.ReadLine();
var text = Clipboard.GetText();
Console.WriteLine();
Console.WriteLine( "--->The clipboard as Text:" );
Console.WriteLine( text );
Console.WriteLine();
Console.WriteLine( "--->Rewriting clipboard with the same CF_HTML data." );
//***Here is the problem code***
var html = Clipboard.GetText( TextDataFormat.Html );
Clipboard.Clear();
Clipboard.SetText( html, TextDataFormat.Html );
var text2 = Clipboard.GetText();
Console.WriteLine();
Console.WriteLine( "--->The clipboard as Text:" );
Console.WriteLine( text2 );
var isSameText = ( text == text2 );
Console.WriteLine();
Console.WriteLine( isSameText ? "Success" : "Failure" );
Console.WriteLine();
Console.WriteLine( "Press enter to exit." );
Console.ReadLine();
}
}





Я могу воспроизвести, что это не работает ... var text2 = Clipboard.GetText(); возвращает "" каждый раз ...
(редактировать) Быстрый поиск дает это, что кажется по теме.
Когда вы копируете данные из браузера в буфер обмена, он помещает одни и те же данные в буфер обмена в нескольких форматах, включая текст и HTML. Таким образом, вы можете считывать данные обратно в текстовом или HTML-формате. Однако, когда вы вызываете SetText здесь, вы передаете ТОЛЬКО в формате HTML, поэтому, когда вы используете обычный GetText, в буфере обмена нет текстовой версии, и вы получаете обратно null.
Вы можете поместить в буфер обмена сразу несколько форматов (т.е. как текст, так и HTML) с помощью IDataObject, но вы должны выполнить перевод между форматами самостоятельно, прежде чем помещать данные в буфер обмена. Вот пример использования IDataObject здесь.
Спасибо за тестирование. Я также пробовал код вашей ссылки. Я тоже не мог заставить это работать.