【问题标题】:DataObject GetDataPresent(format) returns true, and GetData(format) return nullDataObject GetDataPresent(format) 返回 true,GetData(format) 返回 null
【发布时间】:2011-06-30 20:45:52
【问题描述】:

这是我正在尝试做的完整设置:我们在网页上有一个 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 并粘贴,这就是我的图像。

有人遇到过类似情况吗?

【问题讨论】:

  • 遇到类似问题...来自dataObject.GetFormats() 的格式列表包含输入dataObject.GetDataPresent 时返回False 的条目。莫名其妙。

标签: winforms clipboard


【解决方案1】:

我不知道托管 API 发生了什么。我最终只是为函数调用了 WinAPI。

【讨论】:

  • 您能否具体说明您是如何做到的,以及具体的功能?这对我有很大帮助...
猜你喜欢
  • 2019-06-10
  • 2012-09-18
  • 2011-09-12
  • 1970-01-01
  • 2021-11-27
  • 2015-08-06
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多