мой вопрос похож на этот, но это не давало всей необходимой мне информации, или я не очень хорошо это понимал.
Я хочу, чтобы в контекстном меню файла была возможность уведомить мое приложение.
Я добавил ключи:
HKLM/SOFTWARE/Classes/*/shell/MyApp/command::"C:\\path\\test.exe" "%1"HKLM/SOFTWARE/Classes/Folder/shell/MyApp/command::"C:\\path\\test.exe" "%1"
Код теста:
#include <iostream>
int main(int argc, char *argv[])
{
for (int i = 1; i < argc; ++i)
std::cout << argv[i] << "\r\n";
system("pause");
return 0;
}
Это работает нормально, но … Если я отмечу несколько файлов / папок и щелкну правой кнопкой мыши и выберу свою добавленную опцию, запустится много тестовых приложений.
Это не то поведение, которое я хочу, я хочу, чтобы все пути передавались в один экземпляр моего приложения в виде списка argv
s, кто-нибудь знает, как это сделать?
КСТАТИ. Я кодирую с C++
но я думаю, что это не имеет значения, так как это бизнес с оболочкой Windows.
Благодарю.
Я думаю, что правильный путь — написать ContextMenuHandler и зарегистрируйте его как расширение оболочки.
Вы можете найти много образцов, таких как Вот, Вот или же Вот
Обработчики контекстного меню регистрируются под ключом
HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers
По SO уже есть похожие вопросы:
Как передать несколько имен файлов в команду оболочки контекстного меню?
Контекстное меню Windows для нескольких файлов [C ++]
Получение нескольких файлов (аргументов) из контекстного меню оболочки Windows на C #
Других решений пока нет …