Context Shell Menus - 单击时获取标识符

时间:2013-04-26 14:51:12

标签: c# winforms windows-shell

我为/ .txt文件创建了一个上下文shell菜单。

其“动作”类似于“使用记事本编辑”选项。

我可以使用此代码点击菜单打开'记事本' -

subKey.SetValue("", "C:\\Windows\\System32\\notepad.exe");

 //subKey is the newly created sub key - The key creation part works fine.

我如何能够使用与“使用记事本编辑”功能类似的功能?或者至少可以获取触发此事件的'.txt'文件的名称?

注意:通过“使用记事本编辑”,我的意思是在记事本中查看所选文件的内容。

1 个答案:

答案 0 :(得分:3)

shell(explorer.exe)将用%1替换文件名。所以你基本上写道:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\txtfile\shell\openwithnotepad]
@="Open with &Notepad"

[HKEY_CLASSES_ROOT\txtfile\shell\openwithnotepad\command]
@="\"C:\\Windows\\System32\\notepad.exe\" \"%1\""

文件名将作为命令行参数传递给C:\Windows\System32\notepad.exe。例如,如果您打开D:\blah.txt,则记事本将收到D:\blah.txt作为第一个参数。

在C#中,您基本上使用Environment.GetCommandLineArgs()args in Main来检索文件路径。

一个例子:

string[] commandLineArgs = Environment.GetCommandLineArgs();
string fileToOpen = null;
if (commandLineArgs.Length > 1)
{
    if (File.Exists(commandLineArgs[1]))
    {
        fileToOpen = commandLineArgs[1];
    }
}
if (fileToOpen == null)
{
    // new file
}
else
{
    MyEditor.OpenFile(fileToOpen);
}