2009-11-12 109 views
8

我想在窗口注册表中注册我自己的项目扩展。我在谷歌搜索,至少我发现了这个代码,这工作得很好,但我不明白一行。什么是“%L”的含义。在窗口注册表中注册文件扩展名?

的C#代码是

string ext = ".ext"; 
     RegistryKey key = Registry.ClassesRoot.CreateSubKey(ext); 
     MessageBox.Show(exePath); 
     key.SetValue("", "My Project"); 
     key.Close(); 

     key = Registry.ClassesRoot.CreateSubKey(ext + "\\Shell\\Open\\command"); 
     //key = key.CreateSubKey("command"); 

     key.SetValue("", "\"" + Application.ExecutablePath + "\" \"%L\""); 
     key.Close(); 

     key = Registry.ClassesRoot.CreateSubKey(ext + "\\DefaultIcon"); 
     key.SetValue("", Application.StartupPath + "\\icon.ico"); 
     key.Close(); 

那是让我困惑线,

key.SetValue("", "\"" + Application.ExecutablePath + "\" \"%L\""); 

请解释一下,我非常感谢你提前。

回答

4

如果您的应用程序可执行文件位于C:\您的目录\你的Program.exe 行被翻译成:

“C:\你的目录\你的Program.exe” “%L”

%L被翻译成您正在打开的文件,因此您的程序正在执行将该文件作为第一个参数执行

+0

你的意思是说%L是带我打开文件的一种参数。 – qulzam 2009-11-12 08:32:46

+0

你可以知道任何在线来源,给我很简短的描述abt窗口注册表。 – qulzam 2009-11-12 08:33:58

+0

确切地说,这是一个特殊的关键字,最终转换为您的开放文件 – rossoft 2009-11-12 08:34:48

1

为了理解%L,您需要了解哪个程序将用于读取注册表。

在这种情况下,当启动与扩展相关的程序时,explorer.exe会读取并处理`HKCR.ext \ shell *'下指定的动词。

在创建命令行时,似乎并没有一个浏览器查找的明确列表。但是,%L告诉资源管理器,它启动的程序将在命令行上接受长文件名。而长文件名可以有空格。

这就是为什么在命令行上需要长文件名的程序需要能够处理空格 - explorer通过使用','作为命令行分隔符来执行此操作,或者通过允许命令行上的文件名为用引号括起来。

0

%L是关联已调用程序的文件的“long name”。在现代操作系统上,它与%1short name)相同。