2013-03-26 2 views
0

Привет, коллеги-программисты. У меня проблема с некоторыми консольными приложениями в программе на C++, и моя цель заключается в следующем.Переключение окон Windows C++ CMD

  1. Создать первое окно CMD.
  2. Выполнение команды. (система («напечатать некоторый текст ошибки»);)
  3. Создайте второе окно CMD.
  4. Измените систему (...) на второй CMD-окно.
  5. Выполнение команды.
  6. Измените систему (...) на первый CMD-окно.
  7. Выполнение команды.

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


  1. Первое окно CMD создается при запуске приложения.
  2. Выполнение команды в этом окне с помощью системы (...); работает отлично.
  3. создать второе окно CMD с

    HWND new_hWnd = NULL; 
    ShellExecute(new_hWnd, "open", "cmd.exe", NULL, NULL, SW_SHOW); 
    
  4. Здесь у меня есть проблемы, я не смог переориентировать систему (...) в другое окно CMD, и это часть I нужна помощь, потому что, если я смогу это понять, шаги 5, 6 и 7 будут легко завершены.

Я попытался исследовать это в Интернете и столкнулся с несколькими примерами, используя «трубы», но не смог их воссоздать или понять. Кроме того, я заметил, есть функция

GetConsoleWindow(); 

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

Итак, как мне настроить систему (...) на разные CMD-окна с помощью ручек? Если это невозможно, как я могу реализовать эту «трубную» систему.

Если решение является последним, пожалуйста, постарайтесь быть максимально подробным и простым, потому что каждый пример, который я нашел в Интернете, действительно большой и трудный для чтения/понимания.

Если нет простого способа реализовать «трубы», то, пожалуйста, напишите или укажите мне лучшее (что-то, что поможет мне понять, как работают трубы), например, вы можете найти, и я буду продолжать работать с ним, пока не буду это понимать вне. Заранее спасибо!

+0

Вы не можете использовать ShellExecute (..., "ЦМД", ...) для настройки различных окон консоли. Посмотрите на AllocConsole. –

+0

AllocConsole не работает для меня, потому что для его вызова мне сначала нужно позвонить FreeConsole, который выключит мое начальное окно консоли, которое мне нужно продолжать работать. Оба окна консоли должны оставаться открытыми, оригинальными и вновь созданными. – user2115945

ответ

1

Вы можете создать новую консоль для нового процесса, указав значение dwCreationFlags значение CREATE_NEW_CONSOLE при вызове CreateProcess.

Смотрите документацию: