gpt4 book ai didi

c# - 是否可以在 C#/.Net 中将消息记录到 cmd.exe?

转载 作者:太空狗 更新时间:2023-10-29 22:34:08 25 4
gpt4 key购买 nike

是否可以将消息从 WinForms 应用程序记录到以编程方式启动的 cmd.exe 进程?我尝试对以下代码进行各种变体:

private void button1_Click(object sender, EventArgs e)
{
Log("Button has been pressed");
}

private void Log(string message)
{
var process = Process.Start(new ProcessStartInfo("cmd.exe", @"/K ""more""")
{
UseShellExecute = false,
RedirectStandardInput = true,
});
process.StandardInput.WriteLine(message);
}

不幸的是,控制台窗口闪烁了半秒,仅此而已。

请不要回答我真正想做的事情,因为现在我只是好奇这是否可能:)

最佳答案

你很幸运。我刚刚为我在这里漂浮的代码生成器玩具项目解决了这个问题。

使用 AttachConsoleAllocConsole Win32 API,您只需使用 System.Console.WriteLine(或 Read,或 Error .WriteLine 等)像往常一样。

以下代码片段确定表单应用程序何时从控制台窗口启动,并附加到它的父控制台;如果这不起作用,它将创建自己的控制台,并记住保持打开状态(例如,这样它就不会在用户可以读取输出之前消失)。

    [DllImport("kernel32.dll")] static extern bool AllocConsole();
[DllImport("kernel32.dll")] static extern bool AttachConsole(int pw);
private static bool _hasConsole, _keepConsoleOpen;
static private void EnsureConsole()
{
_hasConsole = _hasConsole || AttachConsole(-1);
_keepConsoleOpen = !_hasConsole || _keepConsoleOpen;
_hasConsole = _hasConsole || AllocConsole();
}

[STAThread]
private static void Main(string[] args)
{
EnsureConsole();

// the usual stuff -- your program

if (_keepConsoleOpen)
{
Console.WriteLine("(press enter)...");
Console.Read();
}
}

关于c# - 是否可以在 C#/.Net 中将消息记录到 cmd.exe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6546455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com