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