Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
1 / 1 / 1
Регистрация: 25.04.2015
Сообщений: 27

WinAPI и командная строка. Функции ввода

03.04.2017, 10:15. Показов 2416. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Помогите разобраться с WinAPI, а конкретнее с командной строкой и ее функциями. Нужно написать программу, которая вызывает другую программу через командную строку(prog.exe "arg1" /to "arg2"). Пробовал через функцию system, но не получилось, либо неправильно делал.
Приведите пожалуйста пример такого вызова.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.04.2017, 10:15
Ответы с готовыми решениями:

Подскажите почему разные графики переходной функции выдаёт Simulink и командная строка MatLab
Подскажите почему разные графики переходной функции выдаёт Simulink и командная строка MatLab для одной и той же передаточной функции...

Командная строка
Доброго времени суток. При работе с командной строкой использую такой код: mov ax, @data mov ds, ax ;mov es, ax ...

Командная строка
Создать командный файл *.bat выводящий на экран построчно слова из командной строки запуска *.bat на выполнение. Слова вывести в алфавитном...

6
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
03.04.2017, 10:23
Используй функцию CreateProcess. Описание есть в MSDN:
https://msdn.microsoft.com/en-... s.85).aspx
0
1 / 1 / 1
Регистрация: 25.04.2015
Сообщений: 27
05.04.2017, 14:46  [ТС]
Да, спасибо. Но возникла проблема. Без аргументов программа запускается через консоль, а если приписать еще и аргументы, то вылетает или ничего не происходит...

Программа работает:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <tchar.h>
 
using namespace std;
 
 
int main(int argc, char* argv[])
{
    STARTUPINFO         siStartupInfo;
    PROCESS_INFORMATION piProcessInfo;
 
    memset(&siStartupInfo, 0, sizeof(siStartupInfo));
    memset(&piProcessInfo, 0, sizeof(piProcessInfo));
 
    siStartupInfo.cb = sizeof(siStartupInfo);
 
    if (CreateProcess(
        NULL,                                               // Application name
        _tcsdup(TEXT("c:\\folder\\prog.exe")),                 // Additional application arguments
        NULL,
        NULL,
        FALSE,
        CREATE_DEFAULT_ERROR_MODE,
        NULL,
        NULL,
        &siStartupInfo,
        &piProcessInfo) == FALSE)
 
        // Could not start application
        WaitForSingleObject(piProcessInfo.hProcess, INFINITE);
    
    ::CloseHandle(piProcessInfo.hThread);
    ::CloseHandle(piProcessInfo.hProcess);
 
    return 0;
}

Но если дописать аргументы, программа перестает работать.

C++
1
2
3
...
_tcsdup(TEXT("c:\\folder\\prog.exe in /to out")),                 // Additional application arguments
....
Пробовал делать еще так, но тоже не вышло:
C++
1
2
3
4
5
6
7
8
9
10
11
if (CreateProcess(
        _tcsdup(TEXT("c:\\folder\\prog.exe")),      // Application name
        _tcsdup(TEXT(" in /to out")),         // Additional application arguments
        NULL,
        NULL,
        FALSE,
        CREATE_DEFAULT_ERROR_MODE,
        NULL,
        NULL,
        &siStartupInfo,
        &piProcessInfo) == FALSE)
in и out - папки отправления и назначения

Может я неправильно передаю аргументы? Если да, то как правильно?

Добавлено через 22 часа 41 минуту
Убежденный, сможете помочь?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
05.04.2017, 14:56
Вынеси _tcsdup так, чтобы они вызывались до CreateProcess.
И сделай проверку ошибок, т.е. что все аргументы, которые передаются в CreateProcess, валидные.
Это прежде всего. Ну и если падает - подключай отладчик и по стеку смотри, на чем упало, в
какой строке и по какой причине (см. код исключения, расшифровку можно найти в файле ntstatus.h).
0
1 / 1 / 1
Регистрация: 25.04.2015
Сообщений: 27
06.04.2017, 10:33  [ТС]
Сделал, но не помогло. Аргументы валидные. Пробовал также другим способом(закоменчен), т.е. сначала открыть консоль и уже туда передать команду с аргументами, но тоже не вышло(без аргументов приложение конечно же открылось без проблем ) ).

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
....................
//LPCTSTR cmdProg = _tcsdup(TEXT("c:\\windows\\system32\\cmd.exe"));
//LPTSTR cmdArgs = _tcsdup(TEXT("/c c:\\folder\\prog.exe in /to out"));
 
    LPCTSTR cmdProg = _tcsdup(TEXT("c:\\folder\\prog.exe"));
    LPTSTR cmdArgs = _tcsdup(TEXT(" in /to out"));
 
    if (CreateProcess(
        cmdProg,
        cmdArgs,
        NULL,
        NULL,
        FALSE,
        CREATE_DEFAULT_ERROR_MODE,
        NULL,
        NULL,
        &siStartupInfo,
        &piProcessInfo) == FALSE)
...................
Напишите пожалуйста, как по вашему мнению должно работать.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
06.04.2017, 11:01
Цитата Сообщение от UncleMikle Посмотреть сообщение
Сделал, но не помогло.
В чем это выражается? Программа написала "мне не помогло"?
Или вылетела с ошибкой? Если да, то с какой? Что вернула CreateProcess?
Если FALSE, тогда какой GetLastError()? Если TRUE, процесс хотя бы
появился в списке процессов или нет? И т.д.
0
Заблокирован
06.04.2017, 13:13
UncleMikle, функции, оформление строк, использовать соответствующие кодировки проекта
так вы не запутаете ни себя не окружающих
C++
1
2
LPCTSTR cmdProg = _tcsdup(TEXT("c:\\folder\\prog.exe"));
LPTSTR cmdArgs = _tcsdup(TEXT(" in /to out"));
заменить _tcsdup на _strdup, TEXT("") - можно оставить, но, как раз и сбивает с толку
C++
1
2
LPCTSTR cmdProg = _strdup("c:\\folder\\prog.exe");
LPTSTR cmdArgs = _strdup(" in /to out");
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.04.2017, 13:13
Помогаю со студенческими работами здесь

Командная строка
Помогите пожалуйста с программой. Объясните, как работать с командной строкой через с++? Задание таково: - В командной строке задаются...

C++ и командная строка
Как с помощью с++ открыть ком. строку и ввести команды?

Командная строка
Всем привет, Возникли проблемы при компиляции проекта: Эксперты, прошу помощи! :) P.S. Программа - длл библиотека,...

Командная строка
Вообщем я загрузил себе W7 и XP и теперь проблема с &quot;правим загрузень - bootsect /nt60 All&quot;. Вообщем когда я загрузил XP я начал...

Командная строка
Здравствуйте. Подскажите, пожалуйста, как попасть в командную строку VS 2017?


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в КА2. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа в КА2. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru