0

アプリケーションの右クリック ショートカット エントリ (エクスプローラーの右クリック コンテキスト メニュー) を作成しました。右クリックした場所のフォルダー パスを取得したいのですが、どうすればよいですか?

ショートカットを作成する私のコード:

RegistryKey rKey = Registry.ClassesRoot.OpenSubKey(@"Directory\Background\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();   

前もって感謝します。

4

1 に答える 1

1

あなたの説明から、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);
    }
  }
}

これで、作業を完了するのに十分だと思います。必要な場合は、サンプル プロジェクトを次に示します。

お役に立てば幸いです。

于 2013-09-14T14:19:13.063 に答える