Как создать консоль
Перейти к содержимому

Как создать консоль

  • автор:

Как создать консоль

Система создает новую консоль тогда, когда она запускает консольный процесс (console process) , процесс символьного режима, точка входа которого — функция main. Например, система создает новую консоль, когда она запускает командный процессор. Когда командный процессор запускает новый консольный процесс, пользователь может установить, создает ли система новую консоль для нового процесса или она наследует консоль командного процессора.

Процесс может создать консоль, используя один из следующих способов:

  • GUI или консольный процесс может использовать функцию CreateProcess с флажком CREATE_NEW_CONSOLE , чтобы создать консольный процесс с новой консолью. (По умолчанию, консольный процесс наследует консоль своего родителя, однако нет гарантии, что вводимые данные получит процесс, для которого они были предназначены).
  • Графический интерфейс пользователя (GUI) или консольный процесс, который в настоящее время не связан с консолью могут использовать функцию AllocConsole для создания новой консоли. (Процесс, который вызывает функцию AllocConsole, не должен подключаться к существующей консоли. Процессы GUI, когда они создаются, не подключаются к консоли. Консольные процессы не связываются с консолью, если они созданы с использованием функции CreateProcess с флажком DETACHED_PROCESS ).

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

Процесс может также создать консоль, устанавливая флажок CREATE_NEW_CONSOLE при вызове функции CreateProcess. Этот метод создает новую консоль, которая является доступной для дочернего процесса, но не для родительского процесса. Отдельные консоли дают возможность, и родительским и дочерним процессам взаимодействовать с пользователем без конфликта. Если этот флажок не установлен, когда создается консольный процесс, оба процесса присоединяются на одну ту же консоль, и нет никакой гарантии, что корректный процесс получит ввод данных, предназначенный для него. Прикладные программы могут предотвратить, беспорядок, создавая дочерние процессы, которые не наследуют дескрипторы буфера вводимых данных, или включать одновременно только один дочерний процесс, который наследует дескриптор буфера вводимых данных, в тоже время предотвращая чтение родительским процессом введенных данных консоли, до тех пор, пока не ребенок не закончил.

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

Когда процесс использует функцию CreateProcess, он может определить структуру STARTUPINFO , члены которой управляют характеристиками первой новой консоли (если таковая имеется) созданной для дочернего процесса. Структура STARTUPINFO, определяемая при вызове функции CreateProcess воздействует на созданную консоль, если установлен флажок CREATE_NEW_CONSOLE . Она также воздействует на созданную консоль, если дочерний процесс впоследствии использует функцию AllocConsole . Ниже перечислены параметры консоли, которые могут быть заданы:

  • Размер окна новой консоли, в знакоместах
  • Размещение окна новой консоли в пиксельных экранных координатах
  • Размер экранного буфера консоли, в знакоместах
  • Атрибуты цвет текста и фона экранного буфера новой консоли
  • Экранное имя в строке заголовка нового консольного окна

Система использует значения по умолчанию, если значения STARTUPINFO не определены. Дочерний процесс может использовать функцию GetStartupInfo, чтобы установить значения в своей структуре STARTUPINFO.

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

Функция Описание
GetConsoleScreenBufferInfo Извлекает размер окна, размер экранного буфера и атрибуты цвета.
SetConsoleWindowInfo Изменяет размер окна консоли.
SetConsoleScreenBufferSize Изменяет размер экранного буфера консоли.
SetConsoleTextAttribute Устанавливает атрибуты цвета.
SetConsoleTitle Устанавливает заголовок окна.
GetConsoleTitle Извлекает заголовок окна консоли.

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

Назад в оглавление темы
На главную страницу темы

Как создать новую консоль в дочернем процессе «Child»?

Я поставил флаг — CREATE_NEW_CONSOLE в атрибутах CreateProcess , но при отладке новая консоль не отображается. Само задание: Создать дочерний процесс Child (добавить к рабочей области еще один консольный вид проекта, при создании дочернего процесса отвести ему новую консоль) .

int main(int argc, char *argv[], char *envp[]) < //Создание дочернего процесса STARTUPINFO si = < sizeof(si) >; SECURITY_ATTRIBUTES saProcess, saThread; PROCESS_INFORMATION piProcessB; TCHAR szPath[MAX_PATH]; lstrcpy(szPath, TEXT("Parents")); CreateProcess(NULL, szPath, &saProcess, &saThread, FALSE, NULL, NULL, NULL, &si, &piProcessB); saProcess.nLength = sizeof(saProcess); saProcess.lpSecurityDescriptor = NULL; saProcess.bInheritHandle = TRUE; saThread.nLength = sizeof(saThread); saThread.lpSecurityDescriptor = NULL; saThread.bInheritHandle = FALSE; lstrcpy(szPath, TEXT("Child")); CreateProcess(NULL, szPath, &saProcess, &saThread, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &piProcessB); GetLastError(); getch(); > 

Отслеживать
задан 2 дек 2012 в 14:26
55 1 1 серебряный знак 9 9 бронзовых знаков

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Консоль должен заказать сам дочерний процесс. (Для этого проще всего откомпилировать его как консольное приложение, консоль появится автоматически.) Вы не сможете флагами запуска заставить её появиться. К примеру, как бы вы не запускали Notepad.exe, консоль не появится.

Флаг CREATE_NEW_CONSOLE делает не совсем то, что вы думаете. Он просто означает, что если запускаемое приложение закажет себе консольное окно, это окно должно быть не унаследовано от вашего процесса (как бывает, если запускать, к примеру, утилиты командной строки из-под cmd.exe), а создано вновь (по есть будет два окна). Вот.

Дополнение: в вашем вопросе сказано, что child вы компилируете сами. Тогда сделайте вот что:

  • Убедитесь, что вы компилируете его как консольное приложение.
  • Убедитесь, что процесс запускается без ошибок. Не игнорируйте возвращаемое значение функций CreateProcess и GetLastError !
  • Выведите какую-нибудь строку в функции main программы child и посмотрите, в какую консоль она выведется.

Создание консоли управления MMC

Вы видели кабину пилота? Всё под рукой, никаких лишних телодвижений. Для того, чтобы взлететь, пилот не идёт в другой конец самолёта включать двигатель.

Так и в ситуации с консолями MMC. Вы создаёте для себя «пульт управления» и при определённых ситуациях нажимаете на нужные «кнопки».
Публикация рассчитана на системных администраторов, желающих познакомиться с методом создания консолей управления Windows, путём использования mmc.exe.

Что такое консоль MMC?

Консоль MMC (Microsoft Management Console) — место для хранения и отображения средств администрирования, созданных корпорацией Майкрософт и другими поставщиками программного обеспечения. Эти средства называются оснастками и служат для управления оборудованием, программным обеспечением и сетевыми компонентами Windows. Некоторые средства, расположенные в папке «Администрирование», например «Управление компьютером», являются оснастками MMC.

Введение

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

Модульная система позволяет объединить в одном месте различные оснастки, это может быть и монитор ресурсов сервера и самый обычный браузер веб-страниц. Мы с вами будем рассматривать последнюю MMC версии 3.0 поставляемую с Windows Server 2003 SP2, Windows Server 2003 R2, Windows Vista, Windows 7 и Windows Server 2008. История консолей управления началась с MMC 1.0 и Windows 95.

Консоль управления находится по пути C:\Windows\System32\mmc.exe.

  • Авторский — в котором у нас будут полная свобода действий и мы сможем удалять и добавлять оснастки;
  • Пользовательский — запрещающий изменения в структуре и подходящий для конечного пользователя.

Момент про разрядность консолей (MMC32 и ММС64)

Для запуска 32-разрядных консолей MMC в 64-разрядных системах, консоль нужно запускать с параметром /32.
Если запустить 64-разрядную консоль в 32-разрядной системе, то она будет завершена.

«Моя первая консоль»

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

  • Оснастка Active Directory;
  • Оснастка DHCP;
  • Управление серверами печати;
  • Управление компьютерами;
  • Управление службами;
  • Набор скриптов и утилит;
  • Набор сетевых ресурсов;
  • Набор удалённых рабочих столов;

Для добавления одних оснасток, вам не понадобятся сразу производить какие-либо дополнительные настройки:

При добавлении других, вам будет предложено сразу их настроить:

При добавлении ряда оснасток предлагается выбор компьютера для управления. Например, при добавлении оснасток Управление компьютером и Службы. Так как мы планируем использовать консоль для управления другими компьютерами, то стоит обратить внимание на чекбокс и проставить его:

Разрешать изменять выбранный для управления компьютер при запуске из командной строки. Применяется при сохранении консоли.

Если вы делаете делаете оснастку универсальной, для подключения к любому компьютеру, то лучший вариант в этом пункте — локальный компьютер. Если будет стоять «другой компьютер», то при каждом запуске созданной нами консоли, будут идти запросы на удалённый компьютер… А если он будет выключен? То придётся подождать, пока оснастка поймёт это и выдаст ошибку.

После нажатия на ОК мы получим консоль с добавленными нами оснастками:

Но нас не устраивает как она выглядит, мы хотим скрыть некоторые элементы. Поле Действия занимает слишком много места, мы хотим от него избавиться и, например, избавиться от строки состояния. Настройки вида можно произвести в меню консоли Вид — Настроить. .

Здесь мы можем убрать и включить отображение нужных нам элементов. Проставляем чекбоксы и видим результат:

На панели задач одних оснасток, мы можем увидеть набор каких-то стандартных действий и свойств. У других оснасток может не быть стандартной панели задач совсем.
Оснастка Службы, например, содержит кнопки, позволяющие Остановить и Перезапустить службу. Мы можем менять внешний вид панели задач и добавлять на неё те действия, которые нам нужны.

Для этого делаем сначала клик по оснастке в корне консоли (в данном случае, клик по Службы (локальные)) и проваливаемся в меню Действия — Новый вид панели задач.

Открывается мастер создания вида панели задач. Нажимаем далее.

Выбираем стиль для нашей новой панели задач. Обращаем внимание на то, что мастер даёт нам подсказки, какой стиль для чего подходит и показывает в окне предпросмотра как это будет выглядеть:

На следующем шаге выбираем к каким элементам консоли мы добавляем созданный нами вид панели задач. Если выбрать пункт Ко всем элементам, имеющим тип выбранного элемента, то если бы у нас в консоли была ещё одна оснастка Службы, к ней тоже применился бы данный вид. Если выбираем К выбранному элементу дерева, то вид применяется только к выбранной оснастке в корне консоли.

Теперь нам остаётся дать название панели задач и, если хотим, добавить описание.

На завершающем шаге, нам предлагается после нажатия на кнопку Готово добавить новую задачу в только что созданную панель задач.

Так как мы не сняли чекбокс на прошлом шаге, перед нами открывается Мастер создания задачи.

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

Мы выберем пункт Команда меню.

Источником команд выбираем Элемент на панели результатов.

Указываем имя и по желанию описание нашей команды.

Выбираем понравившийся значок задачи из имеющихся или загружаем свой.

На завершающем шаге нажимаем кнопку Готово. Если хотим добавить ещё одну задачу, ставим соответствующий чекбокс

После завершения работы мастера, выбирая какую-либо службу, на созданной нами панели задач, мы увидим добавленную нами задачу Перезапустить, при нажатии на которую, служба начнёт перезапускаться

Добавить такие панели задач с задачами можно для любой оснастки.
Следующим шагом, мы добавим в корень нашей консоли пункт из которого будем запускать наши рабочие скрипты и сценарии: Файл — Добавить или удалить оснастку.
Добавляем оснастку Папка:

В корне консоли переименовываем её и создаём новую панель задач: Действие — Новый вид панели задач.

Стиль панели, для удобства, выбираем без списка и применяем к выбранному элементу списка.

Заканчиваем создание выбором названия и добавления описания.
Запускаем мастер создания задач и на этот раз выбираем пункт Команда операционной системы:

Для запуска, например, PowerShell сценария, в поле Команда пишем powershell, а в поле Параметры — путь до сценария. В нашем случае, мы указываем путь до сценария C:\Console\script\new-user.ps1.
Если мы сохраним нашу консоль в папку C:\Console, то до скрипта можем указать путь script\new-user.ps1.

Добавляем название и описание, выбираем иконку задачи и завершаем создание.

При выборе в корне консоли папки Сценарии мы видим созданную только что ссылку на сценарий.

Таким образом можно добавить все необходимые нам утилиты и сценарии
Для того, чтобы добавить ещё одну задачу, после выхода из мастера, мы выбираем в корне консоли нужную оснастку: Действие — Правка вида панели задач.

Вкладка Общие для настройки стиля отображения панели задач.

Вкладка Задачи для добавления новых задач, удаления и изменения существующий.

Для добавления новой задачи нажимаем кнопку Создать. , открывается Мастер создания задачи и мы можем добавлять новую задачу, аналогично предыдущей. Мы, для примера, добавим ссылку на выполнение .reg файла. Для этого, при создании в поле команда пропишем путь C:\Console\Настройки.reg.
Для запуска, например, .exe файла с параметрами, нам надо будет прописать путь до файла в поле Команда и параметры запуска в поле Параметры.

Далее приступим к добавлению к ссылками на сетевые ресурсы. Это могут быть как папки находящиеся локально на компьютере или в сети, так и ссылки на веб-страницы.
Файл — Добавить или удалить оснастку.
Так как мы хотим, чтобы все ресурсы были упорядочены, добавляем новую оснастку Папка и чтобы в неё можно было вкладывать другие оснастки, нажимаем на кнопку Дополнительно и ставим чекбокс Разрешить изменять родительскую оснастку.

В выпадающем списке Родительская оснастка выбираем Папка и добавляем ещё одну оснастку — Ссылка на веб-ресурс:

Если расположение находится в сети, вводим путь. Например, на сервере server1 папка с общим доступом soft

Вводим имя и нажимаем Готово

В корне консоли переименовывание нашу папку, например, в Сетевые ресурсы. Раскрываем её и видим созданную нами ссылку на сетевую папку soft. Нажав на папку soft, увидим её содержимое.
Как было сказано ранее, таким образом можно добавлять как ссылки на локальные и сетевые папки, так и на веб-ресурсы.

Напоследок, мы добавим в нашу консоль оснастку Удалённые рабочие столы.

После добавление оснастки, делаем по ней клик правой кнопкой мыши и выбираем пункт Добавление нового подключения. .

Вводим имя компьютера или ip-адрес и имя для подключения.

При выборе нашего терминала, мы подключимся к нему из окна консоли.

В начале мы говорили о том, что некоторые оснастки работают либо с текущим локальным компьютером, либо с другим, удалённым.
Возьмём, к примеру, оснастку Управление компьютером. Делаем клик правой кнопкой мыши по оснастке — Подключиться к другому компьютеру. .

Вводим имя другого компьютера, нажимаем ОК.

Если компьютер существует, мы получаем консоль управление другим компьютером.

Если нет, то видим ошибку.

Теперь нам надо сохранить нашу новую консоль. Файл — Сохранить как. .
При выходе из консоли, мы получим предложения сохранить изменения.

При повторном открытии консоли мы снова войдём в неё в Авторском режиме, позволяющим делать изменения в структуре. Но мы, например, не хотим, чтобы конечный пользователь мог вносить какие-либо изменения. Для этого, изменим режим запуска по умолчанию.
Выбираем Файл — Параметры.

Выбираем, например Пользовательский — полный доступ. Нажимаем Применить и ОК.
Данный режим позволит работать с имеющимися оснастками и не позволит добавить или удалить новые

Выходим из оснастки с сохранением.
Если при выходе, например, у нас была развёрнута оснастка Управление компьютером, при сохранении и после повторного открытия консоли перед нами так же появится развёрнутая оснастка Управление компьютером.

На этом мы закончили создание нашей консоли управления. Она полностью готова для использования системным администратором.
Создавайте консоли, экспериментируйте, упрощайте работу!

Дополнительная информация
  • Microsoft Management Console — Overview
  • Консоль управления Microsoft 3.0
  • Windows 7: All About the Snap-Ins

Game-Dev-Story

Советы, помощь к игре для iPhone/Android «Game Dev Story». Если у вас возникли проблемы с игрой, заходите к нам на сайт, у нас вы найдёте ответ.

понедельник, 8 августа 2011 г.

Как сделать свою консоль?

Для создания собственной консоли необходимо прокачать работника во всех профессиях (Writer,Coder,Designer и т.д.) до пятого уровня. Для смены профессии нужно покупать у торговца карточки Career Manuals. После этого появится возможность нанять Hardware Eng. Он то нам и нужен.

Перед созданием консоли необходимо максимально прокачать своих работников и много денег, так, для создания самой продвинутой консоли потребуется 91.000К. Процесс создания поделён на две части, в конце-концов нужно прокачать каждый параметр (максимально до 650 очков).

Учтите, что если процесс создания затянется, то часть фанов вас покинет, т.к. вы давно не выпускаете новых игр.

И самое главное, популярность консоли в первую очередь зависит от наличия хороших игр к ней!!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *