使用 Windows 注册表创建自定义文件扩展名

使用 Windows 注册表创建自定义文件扩展名

好的,我已经阅读并在谷歌上搜索了一段时间了,但我不明白出了什么问题。我试图在注册表中创建一个 .int 文件扩展名,以便我可以向其中添加 ShellNew 键,这样它就应该允许我执行简单的右键单击 > 新建 > 文件文件创建方法。所以我转到 HKEY_CLASSES_ROOT 并创建了一个名为 .int 的键。然后,
我创建了一个名为 intfile 的键,它有一个默认图标,并将其 (默认) 字符串设置为“本地化文件”。然后,在我的 .int 键中,我设置了 (默认) intfile 并创建了内容类型,我将其设置为纯文本。然后,我创建了一个名为 ShellNew 的新键,并在该键中将 FileName 设置为 WINDOWS/ShellNew 中我的默认 .int 文件所在的路径。但是,当我右键单击并转到新建时,它没有显示新本地化文件。我是否在某个地方遗漏了注册表项?任何帮助都将不胜感激,我不明白为什么它不起作用,因为我之前已经将 ShellNew 添加到许多键中,并且它一直运行正常。这是我第一次创建一个全新的文件扩展名,但我读过其他存在的文件扩展名,不明白为什么它不起作用。提前再次感谢。

编辑:澄清我所设置的具体内容。

intfile:
     (Default) REG_SZ "Localization File"
intfile>shell>open>command:
     (Default) REG_SZ "C:\Program Files\Notepad++\notepad++.exe"
.int: 
     (Default) REG_SZ "intfile"
     ContentType REG_SZ "plain/text"
     Percieved Type REG_SZ "text"
.int>ShellNew:
     (Default) REG_SZ "null"
     FileName REG_SZ "C:\WINDOWS\ShellNew\New Int.int"

答案1

这是因为你没有正确注册文件类型。好吧,从技术上讲,你没有正确注册“应用程序”。

http://msdn.microsoft.com/en-us/library/cc144148(v=vs.85).aspx#fa_register_type\

您已正确注册 .int。.int说要调用intfile内部文件但是,这是您放置处理文件的应用程序的位置!因此 Shellex 会进行查找intfile,但它发现的只是默认字段中的一个字符串。因此操作失败。

由于您希望在那里输入字符串,因此您必须为 Shell 提供一个要执行的默认动词。在intfilecreate shell\open\command 下。输入应用程序的完整路径,例如“%ProgramFiles%\Notepad++\Notepad++.exe” “%1”。

FileName 是您要复制的文件的完整路径,因此您需要“%windir%,而不是 WINDOWS。

编辑 我不敢相信我竟然会认可这种方法……

但我不知道如果不编写程序的话有什么办法可以添加它。。。

黑客天才

编辑2:

好的,我们开始吧。

.intDefault(SZ)=intfile和 Context Type(SZ) = plain.text。在键下.int,您将有子键Shellnew。默认值应为空。创建一个新的空字符串 (Reg_SZ),并将值放入文件名中:`C:\windows\ShellNew\NewLocalization File'。

intfile在默认设置下New Localization File.

注意缺少双引号。现在intfile需要以下子项:shell,将其设为默认值 = 。接下来,在下open创建子项open

现在创建command下面的子项打开

将程序的完整路径放在带引号的字符串下。即"c:\Program Files (x86)\Notepad++\notepad++.exe" "%1"。注意双引号。

编辑:3

因此看起来 OP 遇到了一个未知问题并通过这种方式解决了它。

嗯,好吧,我搞明白了!你大部分是对的,我也对了一点。问题是我打开过一次文件,并在弹出的对话框中将默认程序设置为 notepad++。这创建了一个名为自动文件。我检查了注册表,非常耗时,删除了所有对 .int 扩展名的引用。之后我重建了它们,现在它运行正常。

相关内容