Справочник щелкните правой кнопкой мыши - PullRequest
0 голосов
/ 01 июня 2018

Я разрабатываю программу на C # WinForms, которая, когда пользователь щелкает правой кнопкой мыши по каталогу и выбирает элемент, который я добавил в контекстное меню оболочки (которое открывает .exe для моего приложения), запускается в фоновом режиме в зависимости от того, гдепользователь щелкает правой кнопкой мыши.

Я уже выяснил, как установить его и добавить в правильное контекстное меню, но я не могу понять самую важную часть программы.Я уже посмотрел здесь , но это не отвечает на мой вопрос, и ответ, который он дает, просто приводит к другому вопросу.

Я также понимаю, что аргументы командной строки существуют, и этокаким образом получен ответ на этот вопрос. Когда я захожу на веб-сайт Microsoft об использовании аргументов командной строки, речь идет только об использовании фактической командной строки, которую я не использую.

Итаку меня вопрос:

Как именно я могу получить путь к каталогу, когда пользователь щелкает правой кнопкой мыши папку и выбирает контекстное меню оболочки, которое я добавил?

Если мне нужно использовать командную строку в фоновом режиме, это нормально, мне просто нужно иметь возможность получить и отправить путь к каталогу для моей программы.

Вот соответствующий код для того, как я использую введенный каталог.По сути, источником является путь к каталогу, который я хочу, когда пользователь щелкает правой кнопкой мыши.

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);
    }
}

1 Ответ

0 голосов
/ 02 июня 2018

Я предполагаю, что вы добавили свое приложение в контекстное меню папок в реестре:

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());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...