这是我正在尝试做的事情的完整设置:我们在网页上有一个ActiveX控件,我们想要将它的视图保存到一个图像中,并将其发布到服务器上。由于此ActiveX控件不直接支持这一点,因此我们必须采用一种稍微复杂一些的方法。
平台: IE8、Windows7、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并粘贴,这就是我的图像。
有没有人遇到过类似的事情?
发布于 2011-07-16 03:25:58
我不知道托管API是怎么回事。我最终只是p/调用了函数的WinAPI。
https://stackoverflow.com/questions/6540920
复制相似问题