Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
2 / 2 / 1
Регистрация: 13.12.2015
Сообщений: 72

Запускать консольное приложение через форму с передачей параметров

29.04.2016, 13:13. Показов 2622. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток.
Задача состоит в следующем:
Есть несколько консольных приложений и одна форма, которая играет роль меню.
Вот я хочу вызывать через это меню консольные приложения, использую WinExec() на кнопках (лучше способа пока не придумал, если кто знает - подскажите, пожалуйста, заодно).
Вся проблема в том, что вызывая некоторые пункты меню, а там нужно вызывать считывание текстового файла, а их может быть много, нужно каким-то образом передавать названия файлов в консольное приложения до запуска, чтобы сразу происходило считывание. Т.е. параметр как-то должен передаваться из формы в консольное приложение. Вот как это делается в C# я знаю (при помощи WCF), как тоже самое реализовать через Visual C++ - пока понятия не имею (уже 800 строк программных модулей написано на C++). Подскажите, пожалуйста.
Заодно, видел такую вещь, что при редактировании форм можно было сделать их внешний вид один в один как в Windows XP/Windows 7. Подскажите, пожалуйста, как подобное можно реализовать.

P.S. Запросы в Интернете и на русском и на английском писал, ничего путного не увидел.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.04.2016, 13:13
Ответы с готовыми решениями:

Запускать АКТИВНЫЙ запрос из Экселя в Аксесс с передачей параметров
Здравствуйте. Тут такая задача. Есть база в Access 2010. Начальство хочет обращаться к ней через Эксель (2010), не устанавливая и не...

Как открыть консольное приложение в .NET через другое консольное приложение .NET
Есть один вопрос. Как открыть консольное приложение .NET через другое консольное приложение .NET, чтобы при этом второе приложение...

Передача параметров в консольное приложение
Приложение консольное,написанное на С++.Задумка следующая:лежит экзешник в папке,для обработки необходимых мне файлов я просто перетягиваю...

12
Заблокирован
29.04.2016, 13:57
Пока не очень понимаю, в чем проблема. Аргументами командной строки передавать параметры не то, что нужно?
0
2 / 2 / 1
Регистрация: 13.12.2015
Сообщений: 72
29.04.2016, 14:21  [ТС]
Мне нужно, чтобы я нажимал на кнопку (button) и запускалось консольное приложение, но нажимая на кнопку я передаю ему название конкретного файла, который должен быть прочитан в консоли. Может и как Вы сказали подходит, но я не знаю, как это реализовать. Пожалуйста, поподробней.

Ещё хочется знать такую вещицу - можно ли, при открытии консольного приложения скрывать саму форму (знаю, можно, не в этом дело), а при закрытии - опять показывать? (в C# всё это делал, в C++, повторюсь, не знаю как).
0
Заблокирован
29.04.2016, 14:24
Мммм...поподробней... Программе можно передать аргументы командной строки. Пример их передачи есть даже в MSDN на странице той же WinExec. Но это от запускаемой программы зависит: работает она с CLI аргументами, или не работает.
0
2 / 2 / 1
Регистрация: 13.12.2015
Сообщений: 72
29.04.2016, 14:26  [ТС]
Т.е. консольное приложение принимает его в main()?
Создавал проект как CLR. Вроде на CLI не очень похоже или это другое?
0
Заблокирован
29.04.2016, 14:33
Цитата Сообщение от Bro_2 Посмотреть сообщение
Т.е. консольное приложение принимает его в main()?
Не обязательно. Оно может прочитать переданные параметры любым другим удобным способом. Вызывающую программу это никак не коснется.
Цитата Сообщение от Bro_2 Посмотреть сообщение
Создавал проект как CLR. Вроде на CLI не очень похоже или это другое?
CLI - это Command Line Interface. CLR - это вообще другая тема.
0
2 / 2 / 1
Регистрация: 13.12.2015
Сообщений: 72
29.04.2016, 14:48  [ТС]
Сейчас попробую. Однако нашёл примеры с CreateProcess(), а не с WinExec().

Добавлено через 12 минут
Покажите, пожалуйста, пример WinExec, передающий параметры. Ничего пока не нашёл в Интернете. А через CreateProcess как-то нудно. Столько параметров и тонкостей.
0
Заблокирован
29.04.2016, 14:49
Лучший ответ Сообщение было отмечено Bro_2 как решение

Решение

https://msdn.microsoft.com/en-... s.85).aspx
1
2 / 2 / 1
Регистрация: 13.12.2015
Сообщений: 72
29.04.2016, 14:53  [ТС]
Кроме как в main, как ещё консольное приложение может считывать аргументы?

Вот сделал
C++
1
WinExec("\"Packet_handler.exe\" 1 ", SW_NORMAL);
Параметр консольное приложение не видит. Я его неверное передаю. Как нужно правильно?
0
Заблокирован
29.04.2016, 14:58
Цитата Сообщение от Bro_2 Посмотреть сообщение
Кроме как в main, как ещё консольное приложение может считывать аргументы?
https://msdn.microsoft.com/en-... s.85).aspx
например.
Цитата Сообщение от Bro_2 Посмотреть сообщение
Параметр консольное приложение не видит.
Представленный код вообще не скомпилируется.
Правильно передаешь, или нет, проверь с notepad'ом. Если он файл откроет, значит, все правильно.
1
2 / 2 / 1
Регистрация: 13.12.2015
Сообщений: 72
29.04.2016, 16:01  [ТС]
Во-первых, благодарю, что возитесь.

Во-вторых,

Цитата Сообщение от nimazzzy Посмотреть сообщение
Представленный код вообще не скомпилируется.
Это почему? Скомпилировалось, пример почти один в один как у Microsoft.

Цитата Сообщение от nimazzzy Посмотреть сообщение
Правильно передаешь, или нет, проверь с notepad'ом. Если он файл откроет, значит, все правильно.
Notepad тут не причём. В самом консольном приложении есть массив из файлов, поэтому передаётся номер. По крайней мере, я так думаю, что нужно номер передавать. Вот только может нужно ещё и название переменной? Или нет?

Добавлено через 42 минуты

Всё, разобрался. Сделал через main. Нужно было разобраться что и как в самих аргументах. Т.е., если передаётся аргумент, то в первом параметре (argc) содержится количество переданных аргументов, во втором (char* argv[]), как я понял, содержатся строковые значения передаваемых аргументов. В итоге считываю передаваемое значение таким образом:

C++
1
int inum = atoi(argv[0]);
Делаю так, потому что передаётся ровно один номер файла, т.е. он всегда будет первым элементом в массиве. Т.к. массив строковый, а нужно получать целочисленное значение, значит осуществляется перевод при помощи atoi.
Можно было бы считать тему закрытой, но если кто подскажет, можно ли при открытии консольного приложения скрывать форму, а при закрытии - снова показывать, то буду очень признателен.

Добавлено через 18 минут
И ещё нужно было делать вот так:
C++
1
WinExec("Packet_handler.exe 1", SW_NORMAL);
А не как на сайте у Microsoft.
0
Заблокирован
29.04.2016, 16:36
Цитата Сообщение от Bro_2 Посмотреть сообщение
И ещё нужно было делать вот так:
C++Выделить код
1
WinExec("Packet_handler.exe 1", SW_NORMAL);
А не как на сайте у Microsoft.
У них так и сделано:
C++
1
WinExec("\"C:\\Program Files\\MyApp.exe\" -L -S", ...)
0
2 / 2 / 1
Регистрация: 13.12.2015
Сообщений: 72
29.04.2016, 19:32  [ТС]
Хорошо бы, если Вы ещё подсказали вторую часть вопроса.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.04.2016, 19:32
Помогаю со студенческими работами здесь

Проблемы с передачей параметров в поток через TStringList
Добрый день. Есть вариант передачи параметров через string unit Unit1; var Form1: TForm1; implementation {$R *.dfm} uses...

Процедура с передачей данных через список параметров
дан текстовый файл содержащий по итогам сдачи зимней сессии на 1 курсе. Сведения о студентах( всего их 25) заданы в виде следующего текста:...

Вызов процедуры с передачей параметров через стек
Программы различаются между собой способом передачи параметров в процедуру и типом процедуры: Программа 1. Передача параметров через...

Перенести консольное приложение на форму
здаруствуйте нужна помощь вот консольная прога ее надо кинуть на форму using System; using System.Collections.Generic; using...

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru