繁体   English   中英

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

[英]How do I prevent a C# console application from taking priority as the active window?

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

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

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

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

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

我不知道如何防止控制台 window 永远显示。 控制台应用程序中的最佳方法是在应用程序加载后立即隐藏 window。 视觉效果是一个控制台window快速打开,然后消失。 也许不是最优的。

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

这会阻止用户交互,但从您的描述来看,这听起来就是您想要的。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM