簡體   English   中英

使用IStorage / IStream從C#拖放到Windows資源管理器

[英]Drag and drop from C# to Windows Explorer with IStorage/IStream

我一直在研究聽起來像簡單功能的東西。 我的想法是我有一個帶有TreeView的應用程序。 此樹視圖表示組織到文件和文件夾中的數據庫的內容,非常類似於Windows資源管理器。 因此,用戶應該能夠將這些文件/文件夾拖出我的應用程序並進入Windows資源管理器。

我決定如果他們拖動文件夾拖動文件或IStorage ,我應該使用IStream 經過很長一段時間和學習方式比我想知道的Win32 / COM(以及來自一個非常有幫助的人的推動),我終於創建了IStreamIStorage

然后我發現要將此IStreamIStorage傳遞給Windows資源管理器,我必須在STGMEDIUM獲取它。 當然,medium.tymed將是IStreamIStorage ,取決於我正在使用的,但據我所知, medium.unionmember必須是指向IStream/IStorage的指針。

我嘗試過使用fixed關鍵字(但當然不是blittable),我試過將爆破的東西轉換為字節數組,但是無法想出辦法讓這種情況發生,我試過了使用GCHandle來固定它(但它仍然不是blittable),以及其他一些不起作用的東西。

所以我的問題是:鑒於IStorage sSTGMEDIUM m ,如何填充m.unionmember以便Windows資源管理器很高興接受丟棄?

通常,C聯合使用C#中的StructLayout.Explicit表示。 然而,這可能不適用於你的情況 - 雖然你可以疊加IStreamIStorage引用,但是編組人員會嘗試編組兩者。 你最好的選擇可能是在你的STGMEDIUM聲明中將該字段聲明為IntPtr ,並使用Marshal.GetIUnknownForObject來初始化它。

我認為這個主題已經過時了,但是任何尋找文件拖放的人都會查看這個討論,特別是dbirdz的帖子: http ://www.daniweb.com/forums/thread166429.html

在我看來,這甚至適用於這個應用程序,我會嘗試將我的流寫入臨時文件,然后可以將其移動到其位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM