2009-02-26 102 views
2

我最近(今天)開始在德爾福內部使用我的註冊表進行管理。 :) 一切工作正常,我的自定義文件類型現在打開我的程序,但有2個問題,我無法解決。Windows註冊表文件關聯菜單

1)我想從所有文件類型選項「打開方式」所以我說

reg := TRegistry.Create; 
    reg.RootKey := HKEY_CLASSES_ROOT; 
    reg.LazyWrite := false; 
    reg.OpenKey('*\OpenWithList\EncryptionSystem', true); 
    reg.WriteString('','C:\Program Files\EncryptionSystem\EncryptionSystem.exe "%1"'); 
    reg.CloseKey; 
    reg.free; 

如果我使用註冊表編輯器它肯定有,因爲它似乎應該是在註冊表中查找,但是當我的權利點擊一個文件,選擇打開它不存在...

所以我加入這個

reg.OpenKey('*\shell\Encrypt\command', true); 
    reg.WriteString('','C:\Program Files\EncryptionSystem\EncryptionSystem.exe "%1"'); 
    reg.CloseKey; 

這樣確實可以爲每一個文件,但該選項是正確的,在與「開放」和頂「編輯」。 我有點兒希望它出現在菜單子目錄中,就像大多數程序一樣... 我意識到我需要玩Shellext,但我不理解這些如何與上下文菜單處理程序一起工作的結構......我會通過閱讀註冊表,我學到了所有的知識......我知道shellext的名字出現在「。*」後面,但是對於我不知道的大亂碼鍵的含義。

回答

6

它看起來像「Open with」菜單沒有單獨由該註冊表項填充。它是由瀏覽器在以下位置存儲在特定的擴展列表莫須有:

HKCU \軟件\微軟\的Windows \ CurrentVersion \ Explorer中\ FileExts

我斗膽猜測,名單隻有當Explorer沒有更好的使用方法時才使用你的應用程序 - 所以只適用於尚未定義自己的「Open with」列表的文件。

此外,它看起來像一個「打開」註冊表項應該有一個不同的形式,從你正在使用的。密鑰應該是EXE文件的名稱,如ExcryptionSystem.exe。該鍵的默認值(如果存在)應該是空字符串。我基於我在我自己的系統上在註冊表中看到的內容。

你應該看看File Types MSDN文章,Introduction to File Associations的一部分。

+0

酵母添加.exe文件extention和去除regestry條目內的數據鏈路似乎已經解決了呢,,笑我不知道如何爲數據鏈路是告訴它在哪裏。 MEH .... – Arthur 2009-02-26 20:11:33

1

看着註冊表,它看起來像你的行應該改變。

reg.OpenKey('*\OpenWithList\EncryptionSystem', true); 
reg.WriteString('','C:\Program Files\EncryptionSystem\EncryptionSystem.exe "%1"') 

reg.OpenKey('*\OpenWithList\EncryptionSystem.exe', true); //note exe 
reg.WriteString('','C:\Program Files\EncryptionSystem\EncryptionSystem.exe "%1"') 

先做檢查。

0

在我的W7P上它們不是被引用的。相反,他們在...

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts