2

我最近(今天)开始从德尔福内部干预我的注册表。:) 一切正常,我的自定义文件类型现在用我的程序打开,但有 2 个问题我无法解决。

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;

如果我使用 regedit 查看注册表,它肯定在那里,但是当我右键单击一个文件并选择打开时它不存在...

所以我然后添加了这个

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

这对每个文件都有效,但选项位于顶部,带有“打开”和“编辑”。我有点希望它像大多数程序一样出现在菜单小节中......我意识到我需要使用 shellext,但我不明白这些如何与上下文菜单处理程序一起工作的结构......我已经学会了所有无论如何,我已经阅读了注册表......我知道 shellext 的名称稍后会出现在“。*”之后,但至于大乱码键的含义,我不知道。

4

3 回答 3

7

看起来“打开方式”菜单不是由该注册表项单独填充的。它被 Explorer 存储在以下位置的特定于扩展名的列表所胜过:

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts

我敢猜测,您添加应用程序的列表仅在资源管理器没有更好用的情况下使用 - 因此仅适用于尚未定义自己的“打开方式”列表的文件。

此外,看起来“打开方式”注册表项的形式应该与您正在使用的形式不同。密钥应该是 EXE 文件的名称,例如ExcryptionSystem.exe。该键的默认值(如果存在)应该是一个空字符串。我只是基于我在自己系统上的注册表中看到的内容。

您应该查看文件类型MSDN 文章,它是文件关联简介的一部分。

于 2009-02-26T18:10:12.010 回答
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"')

首先检查这个。

于 2009-02-26T18:07:48.503 回答
0

在我的 W7P 上,它们没有被引用。相反,他们在...

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts
于 2010-06-20T23:48:43.430 回答