2014-01-26 42 views
2

正如我所看到的,當選擇超過16個文件時,DragQueryFile(hDrop,0xFFFFFFFF,NULL,0);返回16. MSDN:http://msdn.microsoft.com/en-us/library/dd758093%28VS.85%29.aspx 「在Windows 7及更高版本中,當查詢快捷菜單時,傳遞給動詞的項目數限制爲16,然後重新創建動詞,並在完整選擇時重新初始化該動詞被調用。「Windows Shell擴展:選擇16個文件時的上下文菜單

但我的FileContextMenuExt :: Initialize函數只被調用一次,即使我選擇了超過16個文件。 (我使用輸出到文本文件檢出了它)。

如何獲取選定文件及其編號的完整列表?

我的問題與Shell Extension: DragQueryFile returns at most 16 (in Windows 7) 類似,但沒有找到解決方案。 任何人都可以幫助我嗎?

+0

你的問題是什麼? – tenfour

+0

一旦你選擇了你的動作,那麼初始化會被第二次調用,但這次是完整的列表?還是我錯誤地閱讀文檔? – Petesh

+0

「但是我的FileContextMenuExt :: Initialize函數只被調用一次,即使我選擇了超過16個文件(我使用輸出到文本文件檢查了它)。」 – user3237732

回答

2

在這種情況下,邏輯真的很簡單。當您單擊右鍵16個項目將被髮送到IShellExt::Initialize方法,其次是IContextMenu::QueryContextMenu

在這種情況下,你的動詞被調用(即IContextMenu::Invoke的叫法)有兩種可能的路徑:

直至幷包括選項中的16個項目 - >IContextMenu::Invoke被直接調用。在選擇

超過16個項目,則IShellExt::Initialize方法被調用第二次用所有選擇的項目,接着IContextMenu::Invoke

如果你永遠不會調用菜單項,那麼你將永遠不會得到第二個電話IShellExt::Initialize與項目的完整列表。

我有一個sample project on github,它創建了一個簡單的上下文菜單(使用C++),它演示了使用真正的低級別OutputDebugString的行爲。

相關問題