我正在尝试编写控制台应用程序。它有它的原始控制台,我们将它命名为控制台A.我希望这个应用程序通过C#执行以下操作:
- 在另一个线程中打开另一个控制台B,然后从A获取输入并将其输出到B;
- 在A中键入命令,例如dir,并在B中显示输出;
醇>
在做上述事情时(还没有完成.X_X),我发现自己缺乏对控制台窗口的理解,以及如何将其分配给控制台应用程序,特别是我的控制台应用程序开始运行时的第一个控制台。有人会对我有所了解吗?
控制台窗口物理上是视频内存中的内存区域吗?或者是其他东西? 同一进程中的不同线程是否可以为自己的I / O设置不同的控制台?
非常感谢......
嗨,伙计们,现在我正在使用一个控制台应用程序在新进程中启动另一个控制台应用程序。因此,我可以同时输出2个控制台。
我现在的理解是,对于Windows操作系统,控制台是一个特殊窗口,它是操作系统分配给应用程序的系统资源,没有用户界面作为必要的用户界面。 Windows操作系统使用我们的无UI应用程序处理系统准备的控制台窗口之间的连线。
答案 0 :(得分:6)
在Windows术语中,控制台是您在运行“cmd.exe”时看到的文本GUI窗口。它允许您在窗口中写入文本和从窗口读取文本,而窗口没有任何其他UI镶边,例如工具栏,菜单,标签等等。
要开始使用,您需要加载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!”文本。它会一直打开,直到你按下一个键。这是一个控制台应用程序。
控制台窗口在物理上是视频内存中的内存区域吗?或其他什么?
它实际上不是视频内存中的内存区域,而是“其他内容”。维基百科Win32 console页面提供了相当强大的细节描述。
答案 1 :(得分:2)
控制台应用程序只有一个窗口。它没有窗口管理功能,以便生成子“控制台”。
您可以启动其他控制台应用程序,但这些是独立的实体。
答案 2 :(得分:1)
没有。这是一个Windows GUI子系统。在WinAPI中,有一些功能可以使用控制台:http://msdn.microsoft.com/en-us/library/ms682073%28VS.85%29.aspx
答案 3 :(得分:1)
(OS)控制台是一个进程(包含一个或多个执行线程,所有这些线程共享相同的内存空间),此过程具有:
因此,如果您想创建另一个控制台(来自.Net)并链接输入/输出,我了解您必须创建一个进程(通过示例执行“cmd.exe”)。
我不知道.Net的API用于进程操作,但是如果它像Java一样,你可以连接stdin,out和err,这样你就可以从原来的进程中使用你创建的进程。
答案 4 :(得分:1)
Windows应用程序可以有一个控制台,也可以没有控制台,它不能有多个控制台。请参阅AllocConsole的文档。 控制台基本上是“Windows之前”时代的仿真,其中实际上是“控制台”,即连接到大型计算机的键盘和屏幕。 要做你想做的事,你可以用自己的控制台生成另一个进程并在两者之间进行通信,或者创建一个看起来像控制台窗口的GUI应用程序。