CreateProcess вызывает проблемы - PullRequest
0 голосов
/ 12 апреля 2019

по какой-то причине процесс создания открывает cmd, даже если он не указан, а нажатие клавиши enter приводит к появлению большего количества экземпляров cmd в командной строке.

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <direct.h>
void main()
{
    char cmd[255];
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));
   for(;;)
   {
     fgets(cmd,255,stdin);
    CreateProcess(cmd,NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
  }
}

1 Ответ

0 голосов
/ 15 апреля 2019

Сначала fgets получит строку с символом '\ n', когда размер вставленной строки <(255-1). Итак, давайте установим <code>\n на \0:

fgets(cmd, 255, stdin);
cmd[strlen(cmd) - 1] = '\0';
CreateProcess(cmd, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

Второй,

больше экземпляров cmd, всплывающих в командной строке.

Если то, что вы имеете в виду, похоже:

enter image description here

Это связано с тем, что фокус ввода процесса cmd и текущего процесса попеременно появляется в одной консоли, не всегда создавая новый экземпляр.

Если вы CreateProcess с CREATE_NEW_CONSOLE:

CreateProcess(cmd, NULL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);

Вы увидите, что была создана только новая консоль cmd. enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...