下面是我想要做的完整設置:我們在網頁上有一個ActiveX控件(唉),我們想保存它查看圖像並將其發佈到服務器。由於此ActiveX控件不直接支持,我們必須採取稍微更圓潤的方法。DataObject GetDataPresent(format)返回true,GetData(format)返回null
平臺: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。莫名其妙。 – Nyerguds