2009-02-26 144 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