【问题标题】:How to call console as a window instance in Windows Forms?如何在 Windows 窗体中调用控制台作为窗口实例?
【发布时间】:2020-12-31 09:36:07
【问题描述】:

好的,让我们从我不需要开始:在表单应用程序中显示控制台窗口,就像这个视频中的 https://www.youtube.com/watch?v=YHo_W2PvVWs 不是我要找的。​​p>

我创建了 WinForms 应用程序,里面有几个小应用程序,例如:温度转换器、计算器等。现在我想要一个按钮,它将调用控制台,其中已经有一个控制台应用程序的逻辑,如下所示:https://docs.microsoft.com/en-us/visualstudio/get-started/csharp/tutorial-console?view=vs-2019

重点是在 WinForms 中启动控制台应用程序(已经嵌入代码)?

【问题讨论】:

  • 您是在问如何启动一个 .exe 应用程序或如何在您的 WinForms 中嵌入另一个(控制台)应用程序?如果是后者,你想达到什么目的?该控制台窗口不会显示您的主应用程序的控制台输出(至少默认情况下)。
  • 一些可能性:This onethis one

标签: c# visual-studio winforms console console-application


【解决方案1】:

如果我好起来了, 您可以使用这样的方法,也可以为 cmd 发布命令,并且可以更改类型 WindowStyle = ProcessWindowStyle.Hidden, 例如,我没有尝试,但你可以, 像这样在字符串中给出一些cmd代码 链接如下

https://www.wikihow.com/Make-a-Command-Prompt-Calculator

  public int cmdCommandWork (string command, int timeout)
    {
       ProcessStartInfo test = new ProcessStartInfo("cmd.exe", "/C " + command)
       {
         WindowStyle = ProcessWindowStyle.Hidden,
         CreateNoWindow = true,
         UseShellExecute = false,
         WorkingDirectory = @"C:\\"
        };
        Process process = Process.Start(test);
        process.WaitForExit(timeout);
        int exitCode = process.ExitCode;
        process.Close();
        return exitCode;
    }

【讨论】:

  • 感谢您的回答。我希望我的 WinForm 在点击某个按钮时有自己的控制台应用程序弹出窗口。
【解决方案2】:

我确实在这里找到了答案:https://zombievdk.clan.su/news/urok_7_console_v_proekte_windows_forms/2016-07-07-33

我将新的控制台方法添加到我的 WinForm 应用程序中:

公共部分类 NativeMethods

    {
        public static Int32 STD_OUTPUT_HANDLE = -11;

        [System.Runtime.InteropServices.DllImportAttribute("kernel32.dll", EntryPoint = "GetStdHandle")]
        public static extern System.IntPtr GetStdHandle(Int32 nStdHandle);

        [System.Runtime.InteropServices.DllImportAttribute("kernel32.dll", EntryPoint = "AllocConsole")]

        [return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)]

        public static extern bool AllocConsole();
    }

然后将代码主体放到另一个方法 public void consondeb() 中,这样调用第一个方法:

public void consondeb() {

        if (NativeMethods.AllocConsole())
        {

            IntPtr stdHandle = NativeMethods.GetStdHandle(NativeMethods.STD_OUTPUT_HANDLE);

//代码主体

}

}

更多信息请查看github源代码(记得不调试直接启动或者直接按Ctrl+F5:https://github.com/mikepowertech79/Csharp-console-Car-Store-App

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 2014-04-11
    相关资源
    最近更新 更多