DataObject GetDataPresent (формат) возвращает истину, а GetData (формат) возвращает ноль - PullRequest
1 голос
/ 01 июля 2011

Вот полная настройка того, что я пытаюсь сделать: у нас есть элемент управления 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 и вставить, вот мое изображение.

Кто-нибудь сталкивался с чем-то похожим?

1 Ответ

1 голос
/ 15 июля 2011

Понятия не имею, что происходит с управляемым API. В итоге я просто вызвал WinAPI для функций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...