あなたの説明から、Windows エクスプローラーのコンテキスト メニューに登録されているアプリケーションがあるように聞こえます。必要なのは、右クリックしたフォルダー パスです。
もしそうなら、私はあなたに言いたいのですが、それはあなたが期待するようには機能しません.
この特定の目的のために、自分の代わりに次のキーが必要です。
RegistryKey rKey = Registry.ClassesRoot.OpenSubKey(@"Directory\shell", true);
String[] names = rKey.GetSubKeyNames();
foreach (String s in names)
{
System.Windows.Forms.MessageBox.Show(s);
}
RegistryKey newKey = rKey.CreateSubKey("Create HTML Folder");
RegistryKey newSubKey = newKey.CreateSubKey("command");
newSubKey.SetValue("", @"C:\Users\Aviv\Desktop\basicFileCreator.exe " + "\"" + "%1" + "\"");
newSubKey.Close();
newKey.Close();
rKey.Close();
これで、この機能をアプリケーションに実装する準備が整いました。
これを行うには、次のコードをソリューションのProgram.csファイルに追加します。
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] arguments)//Windows passes an array of arguments which may be filesnames or folder names.
{
string avivsfolder = @"\Aviv";
string folderpath = "";
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if (arguments.Length > 0)//If an argument has been passed.
{
folderpath = arguments[0];
try
{
if (Directory.Exists(folderpath))//Make sure the folder exists.
{
Directory.CreateDirectory(folderpath + avivsfolder);
if (Directory.Exists(folderpath + avivsfolder))//To check if the folder was made successfully,if not an exception would stop program exceution,thus no need for 'else' clause.
{
MessageBox.Show("The specified folder was created successfully.", "Application", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
else
{
throw new DirectoryNotFoundException("The specified folder does not exist");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Aviv's Application", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else//No argument passed.
{
MessageBox.Show("You need to select a folder to continue.", "Aviv's Application", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
これで、作業を完了するのに十分だと思います。必要な場合は、サンプル プロジェクトを次に示します。
お役に立てば幸いです。