Здравствуйте. Недавно столкнулся с задачей, часть которой состояла в добавлении сторонней (для Windows) программы в запуск через контекстное меню, с передачей ей пути к файлу.

На русскоязычных сайтах/форумах находились лишь простенькие примеры запуска блокнота через контекстное меню рабочего стола. Углубившись в этой теме я нашел решение, думаю, что стоит поделиться им.

Программа, для вызова из контекстного меню

Для тестирования была написана простейшая программа на Qt/C++. Ее суть заключается в отображении полученного аргумента (пути файла):

#include <QtCore/QCoreApplication>
#include <iostream>
#include <cstdlib>
#include <QString>

using namespace std;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QString com = argv[1]; //Приравнивание аргумента к переменной для определения его наличия, как такового
    if(com.size() == 0) //Если размер переменной 0, следовательно, аргумент не был передан
    {
        cout<<"Path is not passed"<<endl;
    }
    else
    {
        cout<<"Path: "<<com.toStdString()<<endl;
    }
    system("pause");
    return a.exec();
}

Работа с реестром

Ввиду того, что требовалось получение пути любого файла, использовался адрес реестра: HKEY_CLASSES_ROOT\*\shell, в случае, если нужно так же получать путь директории: HKEY_CLASSES_ROOT\Folder\shell.

В директории HKEY_CLASSES_ROOT\*\shell был создан каталог «test» (название может быть любым, его так же можно редактировать изменив значение переменной, находящейся в созданном каталоге).



В котором, в свою очередь создан подкаталог «command», данное название подкаталога является обязательным.



Для добавления сторонней программы, изменим значение переменной "(по умолчанию)" на абсолютный путь к вашей программе, в моем случае это: C:\Users\artur\Documents\build-regtest-Desktop_Qt_5_10_1_MinGW_32bit-Release\release\regtest.exe.

Для передачи пути файла в качестве параметра нужно дописать %1 к значению переменной.





Тест

В контекстном меню случайного файла был запущен, добавленный ранее, пункт «test».



Результат:



Источники

1. How to Add Any Application to the Windows Desktop Right-Click Menu
2. Right click on Windows folder and open with Visual Studio Code