c# - 在 Windows 窗体中嵌入 DOS 控制台

标签 c# winforms c#-2.0 dos

是否可以在 C# 2.0 中的 Windows 窗体或用户控件中嵌入 DOS 控制台?

我们有一个遗留 DOS 产品,我的 Windows 应用程序必须与之交互,并且要求遗留产品的一个实例应在 Windows 应用程序中运行。

目前,我正在使用 user32.dll 定位运行 DOS 产品的窗口,最小化然后最大化窗口,并在窗口中键入字符。这不是解决问题的好方法,因为这意味着我的应用程序必须在应用程序设置中存储窗口名称,并且要求用户在使用交互功能之前返回到 DOS 应用程序的正确页面。

编辑:更多信息

旧版应用需要对用户可见,但不能在单独的窗口中显示。

我已经尝试过 TimothyP 的回答并且效果很好,但是是否有可能实现相同的功能,但 DOS 窗口可视化地嵌入到 Windows 窗体或用户控件中而不是在它自己的窗口中弹出?最好以 ShowDialog() 方式,这样用户就无法与处于“传统模式”的应用程序交互,可以这么说。

最佳答案

可以使用 Process 类重定向控制台/dos 应用程序的标准输入/输出。它可能看起来像这样:

var processStartInfo = new ProcessStartInfo("someoldapp.exe", "-p someparameters");

processStartInfo.UseShellExecute = false;
processStartInfo.ErrorDialog = false;

processStartInfo.RedirectStandardError = true;
processStartInfo.RedirectStandardInput = true;
processStartInfo.RedirectStandardOutput = true;
processStartInfo.CreateNoWindow = true;

Process process = new Process();
process.StartInfo = processStartInfo;
bool processStarted = process.Start();

StreamWriter inputWriter = process.StandardInput;
StreamReader outputReader = process.StandardOutput;
StreamReader errorReader = process.StandardError;
process.WaitForExit();

您现在可以使用流与应用程序交互。 通过将 processStartInfo.CreateNoWindow 设置为 true,原始应用程序将被隐藏。

希望对您有所帮助。

关于c# - 在 Windows 窗体中嵌入 DOS 控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/355724/

相关文章:

c# - 带有手动词法分析器的 ANTLR 解析器

c# - 启动 Xamarin Forms Android 应用程序时未找到 RealmObject

.net - DataGridView 何时从自定义 EditingControl 获取其值?

.net - 如何获取ToolStripButton的坐标?

c# - WinFORMS 中的 WPF 用户控件 : Project Structuring

c# .NET 2.0 缩放滚动条

.net - 在.NET 1.1中调用.NET 2.0程序集

c# - 查找放置在 ListView Wpf 中的控件

c# - 在 TreeView 中动态分组/嵌套平面数据

winforms - 启动进程 TopMost