2014-01-13 36 views
2

增加OpenWithList(不知道這是否屬於在超級用戶,但它似乎有一個cmd.exe的標籤在這裏,所以這裏去...)FTYPE/ASSOC的優先級和命令行

作爲背景,我正在開發一個Firefox附加組件(這個問題不需要Firefox的知識,因爲Firefox附加組件可以調用命令行)。附加組件旨在爲cmd.exe構建不同類型的快捷方式(特別是爲了我的項目https://github.com/brettz9/webappfind,它允許直接從桌面打開文件到網絡應用程序)。

不管怎麼說,我想給用戶這些快捷鍵關聯的選項:

  1. 至於具體的文件擴展名或文件類型的默認處理程序。
  2. 到開放中展示了應用程序(即使用戶選擇不使應用程序的默認處理程序)列表

至於默認處理,我已經找到了ftypeassoc(和associate)命令,但我已經讀過,用戶選擇將覆蓋他們的行爲。有什麼方法可以確保我可以在命令行中將文件擴展名關聯到類型和特定的可執行文件(直到用戶再次更改它),或者如果它是不可能的,那麼至少通過C++或類似的文件可以獲得優先級?

至於打開方式列表:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\<file extension>\OpenWithList 

...在我的測試(與一個exe),此命令:

reg add HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.svg\OpenWithList /v d /d D:\wamp\www\webappfind\cplusplus\WebAppFinder-view-mode-Firefox.exe 

...確實導致的exe文件顯示在:

reg query HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.svg\OpenWithList 

...但它並沒有顯示出來,當我後來右鍵單擊與「.SVG」擴展名的文件。

我真的很感謝這兩點的幫助。

回答

2
REGEDIT4 

[HKEY_CURRENT_USER\Software\Classes\Applications\MYFOO.exe\shell\open\command] 
@="\"C:\\MYFOO.exe\" \"%1\"" 

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.myfoo] 
"Application"="MYFOO.EXE" 

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.myfoo\OpenWithList] 
"a"="MYFOO.EXE" 
"MRUList"="a" 

因此,我調查了什麼使這些文件關聯。看起來您必須創建一個從裸EXE名稱到完整路徑的映射,如前兩個long-ish行所示。然後,您只能在.extension分支中使用EXE名稱。設置.extension的應用程序值將立即爲您提供默認應用程序。請記住,只能使用APP.EXE,其完整路徑必須如上定義。這是你的主要錯誤。 「%1」部分允許您自定義程序的參數,以便它不必僅僅是引號中的打開文檔,如下所示。反斜槓只是Regedit的轉義字符,如果您認爲合適,您可以丟棄它們。

OpenWithList是有棘手的意義上,有字母的條目,只是盲寫可能會覆蓋一些用戶最喜愛的應用程序。一種方法是打電話給你的項目「z」來降低重寫的可能性。正確的方法是列舉關鍵字,併爲您的應用程序提供第一封免費信件。 MRUList並不是必不可少的,儘管它每次都應該使用一封信,而且你的信件一開始就碰到了。

有關用戶友好性的注意事項:資源管理器將緩存這些值直到下次重新啓動。確保您更新註冊表並首先放置exe文件,然後再創建文件。雖然緩存只能完全影響文件的顯示,並且運行時會再次讀取註冊表,並會按需要執行。

提示:如果您決定使用Regedit而不是reg,則參數/s將跳過確認消息並立即應用這些值。確保在完整路徑中使用雙反斜槓,如圖所示。在準備您的臨時.reg文件時,確保將兩個CRLF追加到最後,否則毛刺可能會導致您的最後一行代碼被忽略。此示例以REGEDIT4開頭,表示ANSI文件。如果您需要在應用程序路徑中支持Unicode,則必須使用Windows Registry Editor Version 5.00開始文件並將其存儲爲UTF16。這已經是調用reg的高級解決方案,因爲您無法通過命令行來獲取CMD.EXE來處理特殊的UTF內容,而不會發生任何改動。

+0

非常渴望嘗試這一點,並打算在第二天或至少在賞金結束之前這樣做。謝謝! –

+1

我目前太忙了,無法得到一個完整的確認,但是你的工作激勵我找到其他有用的鏈接(請參閱https://github.com/brettz9/executable-builder/commit/ace744555385b61771fdf98d8d54f8b66611830b#diff-f120a35df9cdfce8a669cfadfaa86f3b ),尤其是OpenWithProgids優先於XP上的OpenWithList,SHChangeNotify和SHCNE_ASSOCCHANGED事件可以導致關聯(一個使用VBScript)來避免系統重新啓動。非常非常感謝你! –