我用 C# 制作了一个文件编辑器,我可以使用工具栏中的“打开”按钮打开文件,我还将正确的文件类型与程序相关联,因此当我单击扩展名为 *.nlp 的文件时,程序会正确打开,但不打开文件本身(这很合乎逻辑,因为我还没有实现它)
现在是我的问题,我该如何实现这样的事情?我希望在单击文件时打开并加载文件。
(顺便说一句,该文件只是纯文本,所以没什么特别的,如果重要的话,它适用于 Windows)
我用 C# 制作了一个文件编辑器,我可以使用工具栏中的“打开”按钮打开文件,我还将正确的文件类型与程序相关联,因此当我单击扩展名为 *.nlp 的文件时,程序会正确打开,但不打开文件本身(这很合乎逻辑,因为我还没有实现它)
现在是我的问题,我该如何实现这样的事情?我希望在单击文件时打开并加载文件。
(顺便说一句,该文件只是纯文本,所以没什么特别的,如果重要的话,它适用于 Windows)
在 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
}
似乎没有用于直接管理文件关联的 .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
文件名将作为参数传递给您的应用程序:
public static void Main(string[] args)
{
if ( args != null && args.Length > 0 )
{
string filename = args[0];
if ( File.Exists ( filename ) )
{
//Open file
}
}
}