2011-06-30 39 views
1

下面是我想要做的完整設置:我們在網頁上有一個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並粘貼,並且存在我的圖像。

任何人碰到類似的東西?

+0

得到一個類似的問題...來自'dataObject.GetFormats()'的格式列表包含的條目在被提交到'dataObject.GetDataPresent'時,返回False。莫名其妙。 – Nyerguds

回答

1

我不知道託管API發生了什麼。我最終只是爲函數調用WinAPI。

+0

你能指定你是如何做到的,以及具體哪些功能?它會幫助我很多...... – Nyerguds

相關問題