我正在设计一个C#WinForms程序,当用户右键单击一个目录并选择我添加到shell上下文菜单的项目(为我的应用程序打开.exe)时,它在后台运行用户点击的位置。
我已经想出如何安装它并将其添加到正确的上下文菜单中,但我似乎无法找出该程序中最关键的部分。我已经查看了here,但这并没有回答我的问题,它给出的答案只会导致另一个问题。
我也意识到存在命令行参数,这就是this question is answered.当我进入微软网站关于使用命令行参数的时候,它只是关于使用一个实际的命令行,我是不使用。
所以我的问题是:
当用户右键单击文件夹并选择我添加的shell上下文菜单时,我究竟如何获取目录路径?
如果我必须在后台使用命令行,那很好我只需要能够获取并将目录路径发送到我的程序。
以下是我如何使用输入目录的相关代码。本质上,source是用户右键单击时我想要的目录路径。
private void recursiveCheck(string source)
{
string[] directories = Directory.GetDirectories(source);
foreach(string directory in directories)
{
string test = new DirectoryInfo(directory).Name;
if (test.Length >= 3 && (test.Substring(test.Length - 3).Equals("val", StringComparison.InvariantCultureIgnoreCase) || (test.Substring(test.Length - 3).Equals("ash", StringComparison.InvariantCultureIgnoreCase)))
{
if (Directory.Exists(directory + "\\STARTUP"))
testing_dir(directory);
else
{
MessageBox.Show("Error! Startup folder does not exist in: " + test);
Application.Exit();
}
}
else
recursiveCheck(directory);
}
}
答案 0 :(得分:1)
我假设您已将应用程序添加到注册表中文件夹的上下文菜单中:
HKEY_CLASSES_ROOT
Directory
shell
OpenWithMyApp → (Default): Open With My App
command → (Default): "c:\myapp.exe" "%V"
关键点在%V
。它将是您右键单击的文件夹名称,它将作为命令行参数传递给您的应用程序。
然后在你的应用程序中,这就足够了:
[STAThread]
static void Main()
{
string folderName = null ;
if (Environment.GetCommandLineArgs().Length > 1)
folderName = Environment.GetCommandLineArgs()[1];
MessageBox.Show(folderName);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(true);
Application.Run(new Form1());
}