Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在系统启动时最小化Windows窗体_C#_Winforms - Fatal编程技术网

C# 在系统启动时最小化Windows窗体

C# 在系统启动时最小化Windows窗体,c#,winforms,C#,Winforms,我已经为它开发了一个windows窗体应用程序和安装程序。我已经在我的机器上安装了那个应用程序。现在,当我重新启动电脑或登录电脑时,应用程序就会启动并显示在桌面上。系统托盘图标也显示在系统托盘中。现在我想保持应用程序隐藏,只有系统托盘图标应该是可见的。表示应用程序不应显示在屏幕上,但系统托盘图标应可见。我使用了“CreateProcessAsCurrentUser”方法,其中我将“STARTF_USESHOWWINDOW”的值设置为不同的值。但它仍然不起作用。此外,我不知道在系统启动时调用哪个应

我已经为它开发了一个windows窗体应用程序和安装程序。我已经在我的机器上安装了那个应用程序。现在,当我重新启动电脑或登录电脑时,应用程序就会启动并显示在桌面上。系统托盘图标也显示在系统托盘中。现在我想保持应用程序隐藏,只有系统托盘图标应该是可见的。表示应用程序不应显示在屏幕上,但系统托盘图标应可见。我使用了“CreateProcessAsCurrentUser”方法,其中我将“STARTF_USESHOWWINDOW”的值设置为不同的值。但它仍然不起作用。此外,我不知道在系统启动时调用哪个应用程序方法。是Program.cs文件中的Main()函数。请告诉我解决方案以及调用的函数

[STAThread]
    Main() function code: `static void Main()
    {
        Mutex mutex = new Mutex(false, "Application Name");
        try
        {
            if (mutex.WaitOne(0, false))
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
                AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
                Application.Run(new MainForm());
            }
            else
            {
                IntPtr pf = NativeMethods.FindWindow(null, "Application Name");
                NativeMethods.ShowWindow(pf, 0);
                NativeMethods.SetForegroundWindow(pf);
            }
        }
我已将flag的值设置如下

[Flags]
public enum CreateProcessFlags : uint
{
     STARTF_USESHOWWINDOW = 0x00000000,
}

试试这个。。。。把这个写在你的表格里:

 protected override void SetVisibleCore(bool value)
        {
            base.SetVisibleCore(false);
        }
这将始终使窗体不可见

不过,你需要一些逻辑来确定它是否应该从应用程序的其他部分显示出来。例如,设置一个全局布尔值并修改上面的代码以使用该值

或者,您可以使用以下选项:

protected override void OnVisibleChanged(EventArgs e)
        {
            base.OnVisibleChanged(e);
            this.Visible = false;
        }
但当你直接运行应用程序时,你会看到一些闪光。然后,您需要再次控制何时使其可见,因此请检查visible属性的全局布尔值,以便最终显示表单

您尝试过吗

private void Form1_Load(object sender, EventArgs e)
    {


        this.WindowState = FormWindowState.Minimized;
        this.Hide();
        this.ShowInTaskbar = true;

    }

然后使用notifyicon

为什么不直接隐藏表单?i、 e..var mainForm=新的mainForm();mainForm.Hide();Application.Run(mainForm)??显然,这取决于初始化MainForm时所做的操作。@Ahmedilyas:我通过在application.Run(newmainform)方法之后和之前将Windowstate设置为minimized进行了尝试。但事实并非如此worked@HansPassant你能详细解释一下我到底要做什么吗?我还不明白平沃克的解释。com@HansPassant:谢谢你的解决方案!