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

6

很抱歉如果这个问题已经被提出过,但我找不到答案。我可能没有用正确的术语搜索。

我有一个控制台程序需要在后台运行。用户需要控制台保持打开状态,但需要它在启动时不成为活动窗口。他们希望能够继续当前正在进行的工作,而不必每次启动时都将控制台最小化。

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


你为什么需要控制台窗口可见? - Yuck
http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/ea8b0fd5-a660-46f9-9dcb-d525cc22dcbd - Gage
不使用GUI会更好吗?只需让它在后台运行?这可以很容易地实现。 - Phil
2个回答

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);

这正是我所需要的。一旦应用程序启动,我会隐藏窗口,这样用户就可以继续完成当前的任务。谢谢。 - sange

1

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

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

这可以防止用户交互,但从您的描述来看,这似乎是您想要的。

但我不确定您是否对“控制台应用程序”具有控制权。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接