Здравствуйте. Недавно столкнулся с задачей, часть которой состояла в добавлении сторонней (для 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_ROOTFoldershell.
В директории HKEY_CLASSES_ROOT*shell был создан каталог «test» (название может быть любым, его так же можно редактировать изменив значение переменной, находящейся в созданном каталоге).
В котором, в свою очередь создан подкаталог «command», данное название подкаталога является обязательным.
Для добавления сторонней программы, изменим значение переменной "(по умолчанию)" на абсолютный путь к вашей программе, в моем случае это: C:UsersarturDocumentsbuild-regtest-Desktop_Qt_5_10_1_MinGW_32bit-Releasereleaseregtest.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
Автор: Леонид Якубович