使用註冊表喜歡你現在是,你將不能夠將多個文件之間的直接區分單個文件。正如您已經注意到的,每個請求的文件都會啓動一個新的應用程序副本。如果你實現了單實例化(這不難做),你可以做的是檢測何時請求第一個文件並啓動一個短計時器,然後讓每個後續文件重置該計時器。當它最終消失時,請檢查您收集的文件數量並根據需要對其執行操作。
更好,和優選的,解決方案是創建,而不是在你的應用的過程外的COM對象,它實現了IDropTarget
接口。 Windows將能夠通過一個入口點將文件信息匯入您的應用程序。您的應用程序無需關心信息來自何處。您不但可以同時支持多個文件,甚至可以支持不同格式的文件信息(Windows可以傳遞文件名,也可以傳遞給您實際的文件數據本身)。
Windows將構造一個單一的IDataObject
對象來存放任何需要的文件信息,然後將其傳遞給您的對象。如果您的應用程序已經運行,COM將能夠訪問您現有的IDropTarget
對象。如果您的應用程序尚未運行,則COM會在訪問其IDropTarget
對象之前自動啓動您的應用程序。無論哪種方式,一旦它運行,您的IDropTarget
可以查看傳遞給它的任何數據,並決定是接受還是拒絕。
如果您註冊COM對象的CLSID
爲DropTarget
所需文件擴展名,用戶將能夠對這些文件雙擊或選中這些文件,然後按Enter鍵,它們將被傳遞到您的IDropTarget
對象。
如果您註冊了您的應用AppPath
然後註冊CLSID
爲DropTarget
它,用戶將能夠拖動文件,無論擴展的,到你的應用程序的EXE文件本身,它們將被傳遞到您的IDropTarget
目的。
如果您使用帶有RegisterDragDrop()
功能相同的COM對象,用戶將可以直接拖動文件,無論擴展的,到你的應用程序的UI,他們將被傳遞到您的IDropTarget
對象。
您有多個選項。也許最漂亮的是[說你的應用程序可以接受包含多個對象的數據對象](http://blogs.msdn.com/b/oldnewthing/archive/2010/05/03/10006065.aspx)。 –