Вопрос:

Скрыть консоль в системе C (), функция Win

c windows cmd system

32131 просмотра

4 ответа

110 Репутация автора

Я пишу C-программу на Dev-C ++, и мне нужно использовать пару команд Windows (CMD). Это легко, но когда команда в функции system () выполнена, программа запускает консоль при выполнении.

Пример:

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

    int main()
    {
      system("if not exist c:\my_docs\doc.txt (xcopy /Y doc.txt c:\my_docs\)"); // Cmd command
      system("pause");
      return 0;
    }

Существует другая функция или модификация, которая не отображает консоль?

Спасибо вам! С наилучшими пожеланиями.

Автор: a0rtega Источник Размещён: 20.10.2009 09:01

Ответы (4)


13 плюса

6511 Репутация автора

Вы можете сделать это с помощью CreateProcess.

STARTUPINFOW si;
PROCESS_INFORMATION pi;

ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));

if (CreateProcessW(command, arg, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi))
{
    WaitForSingleObject(pi.hProcess, INFINITE);
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
}
Автор: Roland Rabien Размещён: 20.10.2009 09:07

3 плюса

81802 Репутация автора

Как указано в FigBug, CreateProcess () - это путь, но я не думаю, что CreateProcess () может выполнить командную оболочку if. Вам может понадобиться передать это как команду:

"cmd.exe /c \"if not exist c:\my_docs\doc.txt (xcopy /Y doc.txt c:\my_docs\)\""

Но лучшим решением может быть использование CreateFile () для проверки существования файла и CopyFile () для его копирования.

Автор: Ferruccio Размещён: 20.10.2009 10:28

15 плюса

167 Репутация автора

Вы можете использовать WinExec("your cmd command", SW_HIDE);вместо system("cmd command").

Автор: Sergio Madrazo Размещён: 20.10.2011 09:06

1 плюс

4332 Репутация автора

ПРИМЕЧАНИЕ. Мой ответ не обязательно соответствует вашему конкретному вопросу, но этот Q & A является лучшим результатом Google для "системы Windows без командной строки" и других подобных запросов.

Вот способ выполнить команды без нового cmd.exeокна. Основываясь на ответе Ролана Рабиена и MSDN , я написал рабочую функцию.

#include "AtlBase.h"
#include "AtlConv.h"
  int windows_system(const char *cmd) {
    PROCESS_INFORMATION p_info;
    STARTUPINFO s_info;
    DWORD ReturnValue;
    CA2T programpath(cmd);

    memset(&s_info, 0, sizeof(s_info));
    memset(&p_info, 0, sizeof(p_info));
    s_info.cb = sizeof(s_info);

    if (CreateProcess(programpath, NULL, NULL, NULL, 0, 0, NULL, NULL, &s_info, &p_info)) {
      WaitForSingleObject(p_info.hProcess, INFINITE);
      GetExitCodeProcess(p_info.hProcess, &ReturnValue);
      CloseHandle(p_info.hProcess);
      CloseHandle(p_info.hThread);
    }
    return ReturnValue;
  }

Работает на всех платформах Windows. Звоните так же, как и вы system().

Автор: MD XF Размещён: 10.03.2017 10:31
Вопросы из категории :
32x32