作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在忙于编写一个用作前端的应用程序:它有一个 GUI,可以获取带有按钮和类似内容的命令行选项,并将它们传递给命令行 .exe。它使用应用程序的控制台来显示命令行应用程序的输出。
这工作正常,但是当使用 Ctrl+C 或尝试关闭控制台窗口时,GUI 也会关闭,这并不是我真正想要的。然而,让程序用它自己的控制台输出是不可能的,因为它批处理文件并且每个文件都会弹出它自己的控制台。
该程序使用 C++ 编写,使用 MSVC 2012 并使用 .NET。我试过 Console::CancelKeyPress 至少让 Ctrl+C 表现得像我想要的那样(停止命令行应用程序而不是 GUI),但对此有一些麻烦。
我的代码
private: System::Void OnCancelKeyPressed(System::Object^ sender, System::ConsoleCancelEventArgs^ e) {
e->Cancel = true;
}
private: System::Void GetConsoleReady() {
COORD c;
FreeConsole();
AllocConsole();
c.X = 80; c.Y = 8000;
SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE),c);
Console::Clear();
Console::TreatControlCAsInput = false;
Console::CancelKeyPress +=
gcnew ConsoleCancelEventHandler(this, &Form1::OnCancelKeyPressed);
}
Console::CancelKeyPress -=
gcnew ConsoleCancelEventHandler(this, &Form1::OnCancelKeyPressed);
最佳答案
您是否考虑过在不同的过程中运行批处理?然后,您可以通过读取衍生进程的 stdout(和 stderror)来显示批处理的输出。
如果您使用的是 .net,请查看 Process.RedirectStandardOutput(这里的示例 Capturing console output from a .NET application (C#))。
如果您隐藏生成的进程,则用户无法与其交互/关闭它。您的主应用程序仍处于完全控制状态,并且 ctrl-c 等没有问题。
关于.net - 如何多次使用 ConsoleCancelEventHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16101517/
我是一名优秀的程序员,十分优秀!