在Windows窗体中嵌入DOS控制台
是否可以在Windows窗体或C#2.0中的用户控件中嵌入DOS控制台?
我们有一个旧版DOS产品,我的Windows应用程序必须与之交互,并且有人要求在Windows应用程序中运行旧版产品的实例。
目前,我正在使用user32.dll来定位DOS产品在其中运行的窗口,最小化然后最大化该窗口,并在该窗口中键入字符。这不是解决该问题的很好方法,因为这意味着我的应用程序必须在应用程序设置中存储窗口名称,并且要求用户在使用交互功能之前返回到DOS应用程序的正确页面。
编辑:更多信息
旧版应用需要对用户可见,但不能在单独的窗口中显示。
我已经尝试过TimothyP的答案,并且效果很好,但是是否有可能实现相同的功能,但是将DOS窗口可视地嵌入到窗口窗体或用户控件中,而不是在自己的窗口中弹出?最好以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,原始应用程序将被隐藏。
我希望这有帮助。
以上是 在Windows窗体中嵌入DOS控制台 的全部内容, 来源链接: utcz.com/qa/423404.html