【问题标题】:Hide Console Window in C# Console Application在 C# 控制台应用程序中隐藏控制台窗口
【发布时间】:2011-04-20 16:45:16
【问题描述】:

问题是,我真的不希望显示控制台窗口,但解决方案应该正在运行。 我的意思是,我想让应用程序在后台运行,而不出现任何窗口。

我该怎么做?

【问题讨论】:

  • 你能告诉我们更多关于应用程序应该做什么的信息吗?听起来应该是服务还是 Windows 应用程序?稍微了解一下它的目的,我们就能提供更多帮助并提出解决此问题的最佳方法。
  • 它的键盘记录应用程序。我使用了 windows 服务,但它无法在 windows 服务中获取关键状态

标签: .net console-application


【解决方案1】:

将输出类型从 Console Application 更改为 Windows Application。这可以在 Visual Studio 中的 Project -> Properties -> Application 下完成:

【讨论】:

  • 控制台窗口闪烁并返回。如何让应用程序在没有窗口的情况下运行?
  • @SOF 用户:你如何启动应用程序?通过在资源管理器中或从“开始”菜单中双击?
  • 我也放了 Console.ReadLine();
  • 删除Console.ReadLine。没有控制台窗口就没有意义。
  • @KarolŻurowski:这里的想法是,您可以将它用于还带有某种形式的 UI(例如系统托盘中的图标)的应用程序或执行特定任务然后退出的应用程序完成后自动。如果您两者都没有,该应用程序将在后台运行,直到注销/关闭或直到它被明确杀死,例如使用任务管理器。
【解决方案2】:

将您的应用程序类型更改为 Windows 应用程序。您的代码仍将运行,但它没有控制台窗口,也没有标准窗口窗口,除非您创建一个。

【讨论】:

  • 控制台窗口闪烁并返回。如何让应用程序在没有窗口的情况下运行?
  • 您确保它不会终止。如果没有更多信息,真的没什么好说的了。程序做什么?它会循环运行吗?
【解决方案3】:

最后你可以使用new ManualResetEvent(false).WaitOne() 而不是Console.Readline/key。这对我很有效。

【讨论】:

    【解决方案4】:

    也许你想试试creating a Windows Service application。它将在后台运行,没有任何 UI。

    【讨论】:

    • Windows 服务无法获取按键事件
    • 服务受到严格限制,具体取决于您的应用程序,从 Windows Vista 开始,它们被强制进入会话 0,因此无法在其他会话中执行任何操作,例如显示弹出消息。
    • @Matt “无法在其他会话中执行任何操作”并不完全正确。这是一个服务的代码项目,它在登录用户的桌面上打开一个管理员命令提示符。 codeproject.com/Articles/35773/…
    【解决方案5】:

    将输出类型从 Console Application 更改为 Windows Application

    您可以在末尾使用new ManualResetEvent(false).WaitOne() 而不是Console.Readline/key 来保持应用运行。

    【讨论】:

      【解决方案6】:

      不用vscode也可以使用user32.dll来实现

          class start
          {
              [DllImport("user32.dll")]
              static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
              static void Main()
              {
                  IntPtr h = Process.GetCurrentProcess().MainWindowHandle;
                  ShowWindow(h, 0);
                  // Do the rest
      

      这仍然会闪烁屏幕,但效果很好

      用途是

      using System.Runtime.InteropServices;
      using System.Diagnostics;
      

      请注意,我还是 csharp 的新手,并不完美,所以请随时发表评论和更正!

      【讨论】:

      • 虽然其他解决方案更受欢迎,但我认为这个解决方案被低估了!特别是因为我可以根据逻辑有条件地显示/隐藏控制台窗口,例如通过添加编译器指令,如“#if DEBUG”
      • 顺便说一句,“Process.GetCurrentProcess().MainWindowHandle;”对我不起作用,stackoverflow.com/a/34440934/1854557 的解决方案引入了另一个 Windows API 调用来完成这项工作。 (Windows 10 上的 .NET 6)
      猜你喜欢
      • 2011-04-04
      • 2016-03-30
      • 2019-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-02
      相关资源
      最近更新 更多