Что именно представляет собой «Консоль»? - PullRequest
9 голосов
/ 25 февраля 2010

Я пытаюсь написать консольное приложение. У него есть оригинальная консоль, назовем ее консоль A. И я хочу, чтобы это приложение выполняло через C # следующие вещи:

  1. Откройте другую консоль B в другом потоке, затем получите ввод от A и выведите его в B;
  2. введите команду в A, например, dir, и покажите результат в B;

во время выполнения вышеуказанных действий (все еще не выполненных. X_X) я не могу понять, как что такое консольное окно и как оно назначено консольному приложению , особенно самая первая консоль, когда мое консольное приложение начинает работать . Может ли кто-нибудь пролить свет на меня?

Является ли консольное окно физически областью памяти в видеопамяти? Или что-то другое? Могут ли разные потоки в одном и том же процессе иметь собственную консоль для собственного ввода-вывода?

Большое спасибо ...

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


Теперь я понимаю, что для ОС Windows консоль - это специальное окно, и это системный ресурс, который ОС назначает приложению без пользовательского интерфейса в качестве необходимого пользовательского интерфейса. ОС Windows управляет проводкой между подготовленным системой окном консоли с нашим приложением без пользовательского интерфейса.

Ответы [ 5 ]

6 голосов
/ 25 февраля 2010

В терминах Windows, консоль - это текстовое окно графического интерфейса, которое вы видите при запуске «cmd.exe». Он позволяет вам писать текст и читать текст из окна без окна, имеющего любой другой хром пользовательского интерфейса, такой как панели инструментов, меню, вкладки и т. Д.

Для начала вам нужно загрузить Visual Studio, создать новый проект и выбрать «Консольное приложение». Измените стандартный код Visual Studio:

using System;
using System.Text;

namespace MyConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Hello, world!");
            Console.ReadKey();
        }
    }
}

Когда вы запустите ваше приложение, откроется окно консоли с текстом «Hello, world!» и он останется открытым, пока вы не нажмете клавишу. Это консольное приложение.

Является ли окно консоли физически областью памяти в видеопамяти? Или что-то еще?

Физически это не область памяти в видеопамяти, это «что-то еще». Страница Wikipedia Win32 содержит довольно подробное описание входов и выходов.

2 голосов
/ 25 февраля 2010

Консольное приложение имеет только одно окно. Он не имеет функций управления окнами для порождения дочерних «консолей».

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

1 голос
/ 25 февраля 2010

Приложение Windows может иметь одну консоль или не иметь консоли, оно не может иметь более одной. См. Документацию для AllocConsole . Консоль - это, по сути, эмуляция времен «до Windows», когда буквально существовала «консоль управления», то есть клавиатура и экран, подключенные к компьютеру мэйнфрейма. Чтобы сделать то, что вы хотите, вы можете создать другой процесс с собственной консолью и обмениваться данными между ними, либо создать приложение с графическим интерфейсом, которое выглядит как окно консоли.

1 голос
/ 25 февраля 2010

Консоль (ОС) - это процесс (связывающий один или несколько потоков выполнения, все из которых имеют одинаковое пространство памяти), и этот процесс имеет:

  • стандартный ввод (поток байтов ввода), что вы вводите
  • стандартный вывод (поток выходных байтов), что печатает программа
  • стандартная ошибка (поток выходных байтов), что печатает программа, когда что-то жалуется

Так что, если вы хотите создать другую консоль (из .Net) и связать входы / выходы, я понимаю, что вам нужно создать процесс (например, выполнить «cmd.exe»).

Я не знаю API .Net для управления процессами, но если это похоже на Java, вы можете подключить stdin, out и err, чтобы вы могли поиграть с созданным вами процессом из исходного.

1 голос
/ 25 февраля 2010

Нет. Это подсистема Windows GUI. В WinAPI есть функции для работы с консолью: http://msdn.microsoft.com/en-us/library/ms682073%28VS.85%29.aspx

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