2011-11-09 113 views
1

我很難搞清楚爲什麼這不起作用在我的電腦上。我讀過這篇文章http://msdn.microsoft.com/en-us/library/bb776820.aspx,並嘗試過它,它適用於未知的文件類型,但對於知道如.bmp它不會 - 我也刪除了.bmp下的其他鍵 - 沒有幫助。我已經在HKEY_CLASSES_ROOT.bmp和HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts.bmp 中試過這個,我需要在我的程序中實現它,所以它在bmp等一些文件類型上具有自定義上下文菜單項。 btw。我試過ContextEdit(一個免費軟件) - 也沒有用 - 有什麼想法?也許不爽快(我試過重新啓動 - 沒有做任何改變)?擴展Windows資源管理器上下文菜單

編輯: 一個更新 - 如果我出於某種原因在默認程序和Windows照片查看器下進行操作,我無法禁用某些文件類型,如.jpg,.bmp,.gif。這很奇怪...

編輯no。 2: 現在開始工作,我已經確定了問題 - 即使重新啓動計算機後文件關聯也沒有刷新。在將txt文件關聯到不同的編輯器後,我的.bmp菜單,圖標和默認程序已經更改。所以現在的主要問題是 - 如何使用C#手動刷新文件關聯?

+0

你是不是想改變快捷菜單某些類型的文件的行爲擴展?如果是,請在資源管理器 - >工具 - >文件夾選項 - >高級和獨特名稱(如ZEBRA001)中進行更改,然後在註冊表中查找該名稱並查看更改內容。 – RetroCoder

+0

是的,但這裏的問題是,在Windows 7下沒有文件夾選項或其他任何地方的文件類型。至於這樣做的免費軟件應用程序,它們就像文章中描述的那樣,它適用於新文件類型,而舊版本(即使是像文章中那樣手動執行),它不起作用。所以我認爲還有一些其他值需要更改... – n1tr0

回答

2

我想我已經找到了這一個解決方案,它是這樣 - 定義:

[DllImport("shell32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
    public static extern void SHChangeNotify(uint wEventId, uint uFlags, IntPtr dwItem1, IntPtr dwItem2); 

    const uint SHCNF_IDLIST = 0x0; 
    const uint SHCNE_ASSOCCHANGED = 0x08000000; 

然後做你代碼的東西與各協會在需要的時候,和之後執行:

SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, IntPtr.Zero, IntPtr.Zero); 

此外,如果提到的註冊表鍵不起作用嘗試:

HKEY_CLASSES_ROOT\SystemFileAssociations\extension\Shell\yourcommand 
+0

不知道爲什麼,但我的機器中不存在'HKEY_CLASSES_ROOT \ SystemFileAssociations'。 – ST3

相關問題