我在C#中创建了一个文件编辑器,我可以使用工具栏中的“打开”按钮打开文件,我还将正确的文件类型与程序相关联,因此当我单击扩展名为* .nlp的文件时程序打开正确,但不打开文件本身(这是非常合乎逻辑的,因为我还没有实现它)
现在是我的问题,我该如何实现这样的事情?我希望在点击它时打开并加载文件。
(顺便说一下,这个文件只是纯文本,所以没什么特别的,如果重要的话,那就是windows)
答案 0 :(得分:4)
在Windows文件中,关联在HKEY_CLASSES_ROOT
您可以手动执行以下操作,也可以最终编写一些安装程序,将正确的条目写入注册表。
您需要注册您的扩展程序,然后将其与this document描述的程序相关联。另请参阅this doc您的注册表应如下所示:
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
}
答案 1 :(得分:2)
似乎没有用于直接管理文件关联的.Net API,但您可以使用Registry类来读取和编写所需的密钥。
您需要在HKEY_CLASSES_ROOT下创建一个名称设置为文件扩展名的键(例如:“。txt”)。将此键的默认值设置为文件类型的唯一名称,例如“Acme.TextFile”。然后在HKEY_CLASSES_ROOT下创建另一个键,名称设置为“Acme.TextFile”。添加一个名为“DefaultIcon”的子项,并将该键的默认值设置为包含您要用于此文件类型的图标的文件。添加另一个名为“shell”的兄弟。在“shell”键下,通过Explorer上下文菜单为您希望提供的每个操作添加一个键,将每个键的默认值设置为可执行文件的路径,后跟空格和“%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
答案 2 :(得分:2)
文件名将作为参数传递给您的应用程序:
public static void Main(string[] args)
{
if ( args != null && args.Length > 0 )
{
string filename = args[0];
if ( File.Exists ( filename ) )
{
//Open file
}
}
}