題 如何在註冊表中為一個文件擴展名關聯多個上下文菜單類型?


我想為我正在開發的程序添加某些文件擴展名(如.zip文件)的自定義上下文菜單選項。 然而,在許多(但不是全部)PC上我的軟件將安裝在7-Zip上,因此[HKEY_CLASSES_ROOT.zip]指的是註冊表中的[HKEY_CLASSES_ROOT \ 7-Zip.zip]。

由於我不想篡改原始的7-Zip安裝,我只想在頂部添加我的上下文菜單選項。 但是[HKEY_CLASSES_ROOT.zip \ shell]中的條目沒有效果,我不知道如何將[HKEY_CLASSES_ROOT.zip]鏈接到[HKEY_CLASSES_ROOT \ MyApp.zip],因為[HKEY_CLASSES_ROOT.zip]的默認值已被使用通過7-Zip。

任何幫助將不勝感激 :)


5
2017-09-09 16:30


起源


查看是否可以找到具有所需行為的文件類型的其他擴展名,並將其用作您嘗試執行的操作的模板。 - martineau
問題是我找到的其他例子不像7-Zip那樣。例如,Gimp只是將自己寫入[HKEY_CLASSES_ROOT \ pngfile \ shell]以獲取.pngs的上下文菜單條目。似乎7-Zip類型劫持.zip擴展,我不知道一個解決方法,但需要一個...... - Sebastian


答案:


如果 .zip 文件是你唯一關心的問題,你可以安全地使用 [HKEY_CLASSES_ROOT\CompressedFolder] 鍵。

這是因為Windows原生使用此密鑰 .zip相關功能和第三方軟件產品(包括7zip)大多傾向於與微軟共享此密鑰。它允許開發人員添加自己的功能  原生Windows“文件夾式”處理 .zip 文件。

這很奇怪,你的 [HKEY_CLASSES_ROOT\.zip] 默認值是指 [HKEY_CLASSES_ROOT\7-Zip.zip]。即使那些舊版本設置正確也是可能的 [HKEY_CLASSES_ROOT\CompressedFolder] 條目 - 你必須檢查。


1
2018-01-30 17:54



這不是我想要的。 - eramit2010


從我在電腦上觀察到的情況來看,你可以安全地“劫持”電腦 .zip 延期。

我在7Zip之前安裝了WinZip,所以WinZip接管了它 .zip 延期, 而7Zip嚴格地保留了它。

然而,7Zip仍然適合我 .zip 文件, 因為它還為所有捕獲的文件類型安裝了一個通用擴展 .zip 檔 (其中包括)。

實際上,在我看來7Zip也接管了 .zip 擴展是一種矯枉過正。


0
2018-01-28 10:42



但它會顯示最新的上下文菜單或說默認應用程序。我想顯示兩者的上下文菜單。 - eramit2010
它顯示兩者。我為.zip文件顯示了WinZip和7Zip:WinZip via HKEY_CLASSES_ROOT\.zip 和7Zip通過其一般擴展。另一個想法是在不劫持任何東西的情況下開發一般/全能擴展。缺點是您的處理程序將始終被調用以對所有文件進行任何右鍵單擊(它可以決定不顯示非zip文件)。優點是你在註冊表中沒有觸及任何7Zip。 - harrymc
我知道所有擴展,但這不是我的問題的正確解決方案。我想使用註冊表在.zip文件的右鍵菜單中添加新條目。我可以通過在默認應用程序的註冊表中添加它來實現。安裝另一個應用程序後,菜單未顯示。 - eramit2010
我在這裡列出了我所知道的兩個解決方案:劫持文件擴展名或者全包。我不知道第三種解決方案。 - harrymc
感謝兩個解決方案,但我已經知道這些。 - eramit2010


好的,我會試著說這個簡單的方法..首先,在HKCR中,為你的程序創建一個密鑰。 (提示,只需複制並重命名一個..)它最少需要3個部分。 CFG.File \ shell \ Open \ command(默認)“%1”

3是: ProgID在我的例子中它是CFG.File 操作在我的示例中,它是一個打開的Shell命令 (並添加“%1”以包含您的對象)

接下來,您需要創建它是否不存在,此鍵是文件類型 OpenWithProgids 現在這裡有一個提示:還可以在OpenWithProgids上創建一個名為Shared的鍵

密鑰Shared告訴Windows不允許任何ProgID獲得控制權或成為默認值。

現在,您只需要添加您在HKCR中製作的ProgID。將其名稱添加到 OpenWithProgids 您可以選擇:二進制條目或古怪的字符串。 你只需要命名它,沒有價值。

我沒有涵蓋UI和Eye Candy的所有選項,但我必須添加這個作為最後的想法:如果文件類型或任何鍵有一個EditFlags條目 - 重命名它或你的修改永遠不會顯示...

哦,最後一個提示:如果您在嘗試更改文件類型圖標時遇到麻煩,請查看ShellEx密鑰,看看它是否有DefaultIcon密鑰。這些文件類型受Windows保護。如果您修改或刪除該條目,Windows'將在每次重啟時重置它。 (除非您獲得整個密鑰的所有權,否則拒絕TI和系統訪問更改所有者或更改權限。

祝你好運先生!


-3
2017-12-16 06:42



-1。 “我會嘗試用簡單的方式說出來” - 我想你很容易以混亂的方式說出(寫),標點可疑,沒有格式化,而且很匆忙。我們閱讀和理解並不容易:什麼是 key name 要么 path哪些詞是隨意的,屬於某些詞 有意義的名字什麼是什麼,什麼去哪裡等等 - Kamil Maciorowski
對不起,我以為我和其他人一起在“背景”中與已經說過的話說過。鑑於上述對話的歷史,我只是添加了最簡單的答案來解決原始問題。也就是說,在我看來,“他們”熟悉註冊表,並對我所描述的內容感到滿意。如果我弄錯了,請原諒我。 - EdgeClub
沒有對話。這是問答網站,而不是論壇。有問題,你的答案應該是 獨立。你可以提一下其他的答案或評論,但請說清楚,(例如“Joe的回答[鏈接]已經過時,現在最好......”)。在我看來,你的答案的主要問題是缺乏適當的格式;它會受益 `backticks`。 這是另一個答案 這是對的。當(如果)你確定你的答案時,請給我留言(從@KamilMaciorowski開始),我將撤回我的downvote。 - Kamil Maciorowski