【发布时间】: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 的条目。莫名其妙。