如何防止C#控制台应用程序将优先级作为活动窗口?

时间:2011-06-10 13:31:18

标签: c# console

如果有人问过我很抱歉,但我找不到答案。我可能没有找到合适的条款。

我有一个需要在后台运行的控制台程序。用户需要控制台在运行时保持打开状态,但需要它在启动时不会成为活动窗口。他们希望继续他们目前正在进行的工作,而不是每次启动时都要尽量减少控制台。

此控制台应用程序多次运行,每次都有一个新的控制台窗口。如何在当前正在运行的任务/窗口后面“隐藏”控制台?

2 个答案:

答案 0 :(得分:6)

您可以使用以下代码以编程方式最小化/恢复控制台窗口:

using System;
using System.IO;

namespace ConsoleApplication1
{
    class Class1
    {
        [System.Runtime.InteropServices.DllImport("user32.dll")]
        private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
        private const int SW_MINIMIZE = 6;
        private const int SW_MAXIMIZE = 3;
        private const int SW_RESTORE = 9;

        [STAThread]
        static void Main(string[] args)
        {
            IntPtr winHandle =
                System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle;
            ShowWindow(winHandle, SW_MINIMIZE);
            System.Threading.Thread.Sleep(2000);
            ShowWindow(winHandle, SW_RESTORE);
        }
    }
}

如果您正在使用Process.Start启动控制台应用程序,请更好地使用它:

System.Diagnostics.ProcessStartInfo process= new
    System.Diagnostics.ProcessStartInfo(@"MyApplication.exe");
process.WindowStyle=System.Diagnostics.ProcessWindowStyle.Minimized;
process.UseShellExecute=false; // Optional
System.Diagnostics.Process.Start(process);

答案 1 :(得分:1)

我不知道阻止控制台窗口显示的方法。控制台应用程序中的最佳方法是在应用程序加载后立即隐藏窗口。视觉效果是快速打开控制台窗口,然后消失。也许不是最佳的。

更好的方法可能是使用Winexe而不是控制台应用程序。在Windows应用程序内部(可能是winforms应用程序),永远不要实例化第一个表单。因此,什么都没有显示出来

这可以防止用户互动,但是根据您的描述,听起来就像您想要的那样。

但我不确定你是否可以控制“控制台应用程序”。