Question

J'obtenu le code suivant pour exécuter l'application au démarrage de Windows:

    private void SetStartup(string AppName, bool enable)
    {
        string runKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";

        Microsoft.Win32.RegistryKey startupKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(runKey);

        if (enable)
        {
            if (startupKey.GetValue(AppName) == null)
            {
                startupKey.Close();
                startupKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(runKey, true);
                startupKey.SetValue(AppName, Application.ExecutablePath.ToString());
                startupKey.Close();
            }
        }
        else
        {
            startupKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(runKey, true);
            startupKey.DeleteValue(AppName, false);
            startupKey.Close();
        }
    }

Il fonctionne. mais je veux que le programme soit réduit au minimum (au démarrage de Windows uniquement). Je ne ai pas trouvé un code de travail / bonne explication comment le faire. Pouvez-vous me aider s'il vous plaît?

merci.

Était-ce utile?

La solution

Avez-vous essayé

this.WindowState = FormWindowState.Minimized;

Si vous voulez démarrer réduit au démarrage de Windows que vous pouvez ajouter argument supplémentaire à la ligne de commande, comme myapp.exe --start-minimized, vous pouvez analyser ce paramètre et détecter si vous devez commencer à réduire au minimum ou non.

Autres conseils

Comme cela ne fait qu'ajouter une clé de Registre SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run qui provoque le système d'exploitation pour démarrer l'application au démarrage, il n'y a pas beaucoup que vous pouvez faire à moins que l'application que vous souhaitez démarrage accepte une commande paramètre de ligne pour commencer à réduire au minimum (Vous pouvez ensuite ajouter le paramètre sur le chemin exécutable de la clé).

Si cela est une fonction nécessaire et vous ne pouvez pas modifier le programme d'accepter un paramètre pour minimiser la seule chose que je peux penser à faire serait d'écrire un programme qui minimiserait ces applications après le système d'exploitation les a commencé.

eu beaucoup de mal à trouver une bonne réponse à cette question, enfin trouvé dans un livre vraiment vieux. Sur ma demande Formulaires, vient d'ouvrir les Program.cs et changé

Application.Run(new Form1());

à

Form1 f = new Form1();
f.WindowState = FormWindowState.Minimized;
f.ShowInTaskbar = false;
Application.Run(f);

et il ouvre sans scintillement directement sur le plateau. Cette application était plus juste un service, mettez-le d'avoir juste une icône Notify et bouton de sortie lorsque faites un clic droit. Espérons que cela aide !!

Faire revivre normalement pas vieux fils, mais d'une manière facile, y compris réduire dans la barre système, pour WPF comme ceci:

     public class EntryPoint
    {
        [STAThread]
        public static void Main(string[] args)
        {
            SingleInstanceManager manager = new SingleInstanceManager();
            manager.Run(args);
        }
    }

    public class SingleInstanceManager : WindowsFormsApplicationBase
    {
        SingleInstanceApplication app;

        public SingleInstanceManager()
        {
            this.IsSingleInstance = true;
        }

        protected override bool OnStartup(Microsoft.VisualBasic.ApplicationServices.StartupEventArgs e)
        {
            app = new SingleInstanceApplication();
            app.Run();
            return false;
        }

        protected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs)
        {
            base.OnStartupNextInstance(eventArgs);
            app.Activate();
        }
    }

    public class SingleInstanceApplication : Application
    {
        protected override void OnStartup(System.Windows.StartupEventArgs e)
        {
            base.OnStartup(e);

            bool startMinimized = false;
            for (int i = 0; i != e.Args.Length; ++i)
            {
                if (e.Args[i] == "/StartMinimized")
                {
                    startMinimized = true;
                }
            }

            MainWindow mainWindow = new MainWindow();
            if (startMinimized)
            {
                mainWindow.WindowState = WindowState.Minimized;
            }
            mainWindow.Show();
        }


        public void Activate()
        {
            this.MainWindow.Activate();
            this.MainWindow.WindowState = WindowState.Normal;
        }
    }
}

Votre classe de fenêtre:

  public partial class MainWindow : Window
{
    private Window _window;

    public MainWindow()
    {
    InitializeComponent();

        SetStartup("AppName", true);
    }
 private void SetStartup(string AppName, bool enable)
    { 
        string runKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run";
        Microsoft.Win32.RegistryKey startupKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(runKey); 
        if (enable)
        { 
            if (startupKey.GetValue(AppName) == null) 
            { 
                startupKey.Close(); 
                startupKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(runKey, true);
                startupKey.SetValue(AppName, Assembly.GetExecutingAssembly().Location + " /StartMinimized");
                startupKey.Close(); 
            }
        } 
        else 
        {
            startupKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(runKey, true);
            startupKey.DeleteValue(AppName, false); 
            startupKey.Close(); 
        }
    }

 private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        if (this.WindowState == System.Windows.WindowState.Minimized)
        {
            var minimized = (_window.WindowState == WindowState.Minimized);

            _window.ShowInTaskbar = !minimized;
        }
        else
            ShowInTaskbar = true;

    }

A travaillé première fois et il fallait poste. J'utilise NotifyIcon WPF, donc pourquoi je avais besoin d'aller dans la barre système au démarrage de Windows.

Je strugled avec le même problème, et a trouvé une solution de travail:

Dans votre program.cs, gérer le paramètre, et passer ensuite à ce paramètre Form1:

static void Main(string[] args)
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    if (args.Length != 0){
        Application.Run(new Form1(args[0]));
    }
    else
    {
        Application.Run(new Form1("normalState"));
    }
}

Dans votre Form1.cs, vous pouvez appeler une fonction avec le paramètre passé et minimiser l'application:

public Form1(string parameter)
{
    InitializeComponent();
    MinimizeApp(parameter);
}

Par exemple, avec cette fonction i utilisé, si vous démarrez l'application avec le paramètre minimisés, il commencera à réduire au minimum, un NotifyIcon apparaît dans la barre des tâches et une bulle disant que l'application est lancée et en cours d'exécution en arrière-plan.

public void MinimizeApp(string parameter)
{
    if (parameter == "-minimized")
    {
        this.WindowState = FormWindowState.Minimized;
        notifyIcon1.Visible = true;
        notifyIcon1.BalloonTipText = "Program is started and running in the background...";
        notifyIcon1.ShowBalloonTip(500);
        Hide();
    }

}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top