【问题标题】:Launch application minimized if launched by system如果由系统启动,则启动应用程序最小化
【发布时间】:2018-06-22 08:46:33
【问题描述】:

我想启动一个应用程序是否最小化,这取决于它是由系统在启动时启动 (Windows) 还是由用户启动(双击它)而不是最小化。

到目前为止,我已经制作了一个转换器程序,它将在 Windows 启动时打开。我已经成功地使用了它。

RegistryKey rk = Registry.CurrentUser.OpenSubKey 
("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); 
rk.SetValue("MyApplicationName", Application.ExecutablePath);
rk.Close();
rk.Dispose();

我只是将这些代码用于启动。我不检查它是否已经在 regedit 中,因为如果它已经存在,它就不会添加。在我将这些代码设置到我的程序后,我重新启动了我的计算机,我的程序在启动时出现了,但它像正常启动一样出现在我的屏幕中心。我可以检查我的程序是否在启动时由 Windows 启动并将其设置为启动吗?通常,如果我单击右上角的“x”,我的程序会将自身隐藏到系统托盘中。我必须右键单击->退出才能真正关闭我的程序。

我的问题是:有什么方法可以检查系统(Windows)或用户是如何启动的?

【问题讨论】:

  • 为您的程序创建一个快捷方式,一个 .lnk 文件。这使您可以将 Run 属性设置为“最小化”。而是在注册表项中启动该 .lnk 文件。使用命令行参数将是另一种方式。
  • 要在注册表项中获取参数,您应该查看:stackoverflow.com/questions/15123421/…

标签: c# windows regedit


【解决方案1】:

由于它们都是从同一个用户开始的,因此很难检测到。作为替代方案,您可以在应用程序中设置一个参数,告诉它是否开始减少。默认情况下,它会打开窗口,如果设置了参数,则不会显示它。您只需在存储在注册表中的执行命令中添加此参数即可。

这里有一些代码:

Program.cs,您查看是否提供了 -minimized 参数并将此信息传递给您的 Form 类

using System;
using System.Linq;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    static class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1(args.Contains("-minimized")));
        }
    }
}

Form1.cs:如果布尔最小化为真,则开始最小化

使用 System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1(bool minimized)
        {
            InitializeComponent();
            if (minimized)
            {
                WindowState = FormWindowState.Minimized;
            }
        }
    }
}

然后您可以启动您的程序,为其提供 -minimized 参数:

.\WindowsFormsApp1.exe -minimized 或不 .\WindowsFormsApp1.exe

【讨论】:

  • 老实说。我仍然是初级开发人员,所以我不知道你刚刚告诉我什么:) 当我阅读你的答案和 Gonzo 的时候,我意识到也许我可以使用第二个 exe 并将第二个设置为启动?但它不会有效..
  • @ShinoLexTazy 是初级(我)不是不尝试的借口,不用担心! 2 exes 不是一个选项,因为它将被复制,而是启动方法。尝试在构造函数上传递参数(例如)。试试看一下 Program.cs -> Main。这些是 exe 正在接收的参数。
  • 抱歉回答晚了。我尝试了这种方法,它就像魅力一样。我会保存这两个代码以备不时之需。复选框方法也很好,因为用户可以选择是否要在启动时打开程序,以及是否希望程序在启动时最小化。我已经用你在这个程序中显示的方式更新了我的代码。
【解决方案2】:

如果我理解正确,您希望最小化启动您的应用程序,对吧?

在这种情况下,您可能需要添加以下代码:

如果您正在开发 WinForms 应用程序

this.WindowState = FormWindowState.Minimized;

如果您正在开发 WPF 应用程序

this.WindowState = WindowState.Minimized;

【讨论】:

  • 是的,这是正确的,但“仅”在启动时。我的意思是,如果用户双击我的 exe 并想要打开它,他必须查看表单。但是,如果我的程序是在 windows 启动时由 windows 打开的,我不希望它放在系统托盘上。以 One Drive 为例。它在启动到系统托盘时默认打开,如果您单击它,它会正常打开。我需要与我在 WinForms 中开发的类似的东西
  • @ShinoLexTazy 看起来这个答案可以帮助你stackoverflow.com/questions/3527555/…
  • 问题已解决。我在我的设置表单上放了一个复选框,并将这个值保存到 regedit。在 Windows 启动时,我检查这个值,如果它是 1,我启动我的通知图标。如果未选中,我会正常打开我的程序。
  • @ShinoLexTazy 如果您希望应用程序在用户启动时正常启动,并且如果它是由 Windows 启动的则最小化,您的复选框将无济于事。我用一些代码更新了我的答案,向您展示如何使用参数处理它
猜你喜欢
  • 1970-01-01
  • 2018-03-01
  • 2014-02-27
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多