5

我用 C# 制作了一个文件编辑器,我可以使用工具栏中的“打开”按钮打开文件,我还将正确的文件类型与程序相关联,因此当我单击扩展名为 *.nlp 的文件时,程序会正确打开,但不打开文件本身(这很合乎逻辑,因为我还没有实现它)

现在是我的问题,我该如何实现这样的事情?我希望在单击文件时打开并加载文件。

(顺便说一句,该文件只是纯文本,所以没什么特别的,如果重要的话,它适用于 Windows)

4

3 回答 3

5

在 windows 中,文件关联在注册表中存储和管理HKEY_CLASSES_ROOT

您可以手动执行以下操作,或者最终编写一个小的安装程序来将正确的条目写入注册表。

您需要注册您的扩展程序,然后将其与本文档描述的程序相关联。另请参阅此文档您的注册表应如下所示:

HKEY_CLASSES_ROOT
   .nlp
      (Default) = YourProgID//can by anything you want
   YourProgID
      shell
         open
            command
               (Default) = yourapp.exe %1

现在,他们回答你的关键是%1命令键。它是打开的文件名,它作为参数传递给您的应用程序。

所以 :

static void Main(string[] args)
{
   // args will contain your filename
}
于 2012-06-05T06:22:03.040 回答
2

似乎没有用于直接管理文件关联的 .Net API,但您可以使用 Registry 类来读取和写入所需的密钥。

您需要在 HKEY_CLASSES_ROOT 下创建一个密钥,并将名称设置为您的文件扩展名(例如:“.txt”)。将此键的默认值设置为文件类型的唯一名称,例如“Acme.TextFile”。然后在 HKEY_CLASSES_ROOT 下创建另一个键,名称设置为“Acme.TextFile”。添加一个名为“DefaultIcon”的子项,并将该项的默认值设置为包含您希望用于此文件类型的图标的文件。添加另一个名为“shell”的兄弟。在“shell”键下,为您希望通过资源管理器上下文菜单提供的每个操作添加一个键,将每个键的默认值设置为可执行文件的路径,后跟空格和“%1”表示路径到选定的文件。

例如,这是一个示例注册表文件,用于在 .txt 文件和 EmEditor 之间创建关联:

Windows 注册表编辑器版本 5.00

[HKEY_CLASSES_ROOT\.txt]
@="emeditor.txt"

[HKEY_CLASSES_ROOT\emeditor.txt]
@="Text Document"

[HKEY_CLASSES_ROOT\emeditor.txt\DefaultIcon]
@="%SystemRoot%\\SysWow64\\imageres.dll,-102"

[HKEY_CLASSES_ROOT\emeditor.txt\shell]

[HKEY_CLASSES_ROOT\emeditor.txt\shell\open]

[HKEY_CLASSES_ROOT\emeditor.txt\shell\open\command]
@="\"C:\\Program Files\\EmEditor\\EMEDITOR.EXE\" \"%1\""

[HKEY_CLASSES_ROOT\emeditor.txt\shell\print]

[HKEY_CLASSES_ROOT\emeditor.txt\shell\print\command]
@="\"C:\\Program Files\\EmEditor\\EMEDITOR.EXE\" /p \"%1\""

感谢@X-Cubed

于 2012-06-05T06:14:44.757 回答
2

文件名将作为参数传递给您的应用程序:

public static void Main(string[] args)
{
  if ( args != null && args.Length > 0 )
  {
    string filename = args[0];
    if ( File.Exists ( filename ) )
    {
      //Open file 
    }
  }
}
于 2012-06-05T06:19:12.313 回答