Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
27 / 22 / 5
Регистрация: 31.01.2019
Сообщений: 102

Каким образом можно передать через аргументы программе множество имен файлов?

01.10.2025, 13:36. Показов 1265. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Каким образом можно передать через аргументы программе множество имен файлов?
Сейчас запускается столько же раз программа сколько выбрано файлов и передается через аргумент один файл.
Или это делается как то иначе?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.10.2025, 13:36
Ответы с готовыми решениями:

Каким образом аргументы передаются по значению?
Всем доброго суток. Решил познать язык С. Взял для начала книжку Кернигана-Ритчи. Дошел до...

Можно ли наращивать количество аргументов функции? Можно ли вернуть количество аргументов функции?
К примеру есть примитивная запись int Funk(bool Er,int q1,int q2,int q3) {return 0;} В...

Использование имен предопределенных объектов в качестве имен переменных
Есть код: #include <iostream> using namespace std; void func() { int cout; cout <<cout...

6
Супер-модератор
Эксперт Hardware
 Аватар для kumehtar
32561 / 16326 / 2707
Регистрация: 23.11.2016
Сообщений: 81,278
Записей в блоге: 63
01.10.2025, 16:11
joogorden, на каком языке программирования пишете?
0
27 / 22 / 5
Регистрация: 31.01.2019
Сообщений: 102
01.10.2025, 16:14  [ТС]
C++ MFC.
0
 Аватар для andrey_f
884 / 537 / 228
Регистрация: 21.02.2011
Сообщений: 5,705
02.10.2025, 11:01
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// В функции InitInstance вашего приложения
BOOL CMyApp::InitInstance()
{
    // Получаем командную строку
    CCommandLineInfo cmdInfo;
    ParseCommandLine(cmdInfo);
    
    // cmdInfo.m_strFileName будет содержать первый файл
    // Для получения всех файлов используем:
    
    int argc;
    LPWSTR* argv = CommandLineToArgvW(GetCommandLineW(), &argc);
    
    if (argv != NULL)
    {
        for (int i = 1; i < argc; i++) // i=1 пропускаем имя exe
        {
            CString filename = argv[i];
            // Обрабатываем каждый файл
            ProcessFile(filename);
        }
        LocalFree(argv);
    }
    
    // ... остальной код инициализации
}
в Visual C++ можно сделать проще
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
BOOL CMyApp::InitInstance()
{
    // Глобальные переменные __argc и __argv
    for (int i = 1; i < __argc; i++)
    {
        CString filename = CString(__argv[i]);
        if (PathFileExists(filename))
        {
            ProcessFile(filename);
        }
    }
    
    // ... остальная инициализация
}
0
27 / 22 / 5
Регистрация: 31.01.2019
Сообщений: 102
02.10.2025, 11:44  [ТС]
andrey_f, спасибо за ответ.

Сами аргументы в программе получаю. Суть проблемы не понятна из-за того что моё изначальное сообщение было перенесено модератором из темы "Windows\ Контекстное меню: редактируем команды, создаем твики реестра".

Проблема в том что не знаю как список выбранных файлов в проводнике Windows получить в моей программе, при запуске самой программы через контекстное меню Windows.

В реестре прописал наподобие блокнота свой .exe:
[HKEY_CLASSES_ROOT\*\shell\Блокнот\comman d]
@="Notepad.exe "%1""

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

Не знаю может для этого достаточно в реестре что то прописать вместо "%1", а может это как то через Mutex делается?
0
 Аватар для andrey_f
884 / 537 / 228
Регистрация: 21.02.2011
Сообщений: 5,705
03.10.2025, 11:01
Цитата Сообщение от joogorden Посмотреть сообщение
В реестре прописал наподобие блокнота свой .exe:
[HKEY_CLASSES_ROOT\*\shell\Блокнот\comman d]
@="Notepad.exe "%1""
%* передает все выбранные файлы как отдельные аргументы в один экземпляр программы.
Замените "%1" на "%*"
Code
1
2
[HKEY_CLASSES_ROOT\*\shell\Блокнот\comman d]
@="Notepad.exe" \"%*\""
Code
1
2
3
4
5
6
[HKEY_CLASSES_ROOT\*\shell\МояПрограмма]
"MultiSelectModel"="Player"
"Icon"="C:\\Path\\To\\YourProgram.exe,0"
 
[HKEY_CLASSES_ROOT\*\shell\МояПрограмма\command]
@="\"C:\\Path\\To\\YourProgram.exe\" \"%*\""
0
27 / 22 / 5
Регистрация: 31.01.2019
Сообщений: 102
03.10.2025, 11:36  [ТС]
Я находил такой вариант через гугл, там у человека тоже была такая проблема, у него в программу передавались звездочки.

При экспорте из реестра у меня:

Code
1
2
3
4
5
6
Windows Registry Editor Version 5.00
 
[HKEY_CLASSES_ROOT\*\shell\HFC]
 
[HKEY_CLASSES_ROOT\*\shell\HFC\Command]
@="\"D:\\Projects\\CRC\\HFC\\Debug\\HFC.exe\" \"%*\""
При таком запуске аргументов всего два, второй пустой. Программа всё равно запускается столько раз сколько выбрано файлов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.10.2025, 11:36
Помогаю со студенческими работами здесь

Не возникает ли коллизия имен, если использовать два пространства имен, и в каждом из них будут одноименные?
Вот например namespace nms1 { int gh; } namespace nms2 { int gh;

Пространство имен и конфликт имен
Доброго времени суток уважаемые пользователи. В контексте решаемой задачи возникла необходимость...

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

Плагин для VS для подсказки имен аргументов
Есть в Intellij IDEA такая фича, явные подсказки имен аргументов (скрин ниже). Интересует, есть ли...

Выбор пространства имен в зависимости от аргумента функции
Здравствуйте! В рамках знакомства с SDL2 я создаю пробный проект. Одним из ключевых моментов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru