Вот полная настройка того, что я пытаюсь сделать: у нас есть элемент управления ActiveX на веб-странице (тьфу), и мы хотим сохранить его вид в изображение и опубликовать его на сервере. Поскольку этот элемент управления ActiveX не поддерживает это напрямую, мы должны использовать более округлый метод.
Платформа: IE8, Windows 7, защищенный режим UAC / IE выключен.
Этот метод отправляет элементу управления ActiveX сообщение для копирования его текущего представления в буфер обмена. Как только это будет сделано, мы запустим приложение с помощью обработчика протокола (например, app: clipboard / blah / blah). Предполагается, что эта программа извлекает данные из буфера обмена в нужном формате (jpeg) и публикует их по URL.
Код, который я использую для тестирования, таков:
var dataObject = Clipboard.GetDataObject();
Trace.WriteLine("Data formats on clipboard: " + dataObject.GetFormats().Aggregate(" ",(s,v)=>s+v+ " "));
foreach (var fmt in dataObject.GetFormats())
{
Trace.WriteLine("GetDataPresent on " + fmt + ": " + dataObject.GetDataPresent(fmt));
Trace.WriteLine("GetData on " + fmt +": " + !(dataObject.GetData(fmt,true)==null));
}
Что приводит к следующему выводу при запуске из обработчика:
Data formats on clipboard: EnhancedMetafile MetaFilePict
GetDataPresent on EnhancedMetafile: True
GetData on EnhancedMetafile is null: True
GetDataPresent on MetaFilePict: True
GetData on MetaFilePict is null: True
Теперь я абсолютно не понимаю, почему GetDataPresent возвращает значение true, а затем GetData в той же строке формата возвращает значение NULL. Для дополнительного бонуса я знаю, что данные попадают в буфер обмена, так как я могу развернуться и зайти в Paint.Net и вставить, вот мое изображение.
Кто-нибудь сталкивался с чем-то похожим?