Domanda

ho ottenuto il seguente codice per eseguire l'applicazione all'avvio di 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();
        }
    }

Funziona. ma voglio il programma per iniziare a ridurre al minimo (solo all'avvio di Windows). Non ho trovato un lavoro Codice / buona spiegazione come farlo. Mi potete aiutare per favore?

Grazie.

È stato utile?

Soluzione

Hai provato

this.WindowState = FormWindowState.Minimized;

Se si desidera avviare minimizzato all'avvio di Windows solo è possibile aggiungere l'argomento in più per linea di comando, come myapp.exe --start-minimized, allora si può analizzare questo parametro e rilevare se è necessario iniziare minimizzato o meno.

Altri suggerimenti

Dal momento che questo è l'aggiunta di solo una chiave di registro per SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run, che fa sì che il sistema operativo per avviare l'applicazione in fase di avvio, non c'è molto che si può fare a meno che l'applicazione che si desidera l'avvio accetta un comando parametro di riga per iniziare minimizzato (Si potrebbe quindi aggiungere il parametro al percorso dell'eseguibile del tasto).

Se questa è una funzione necessaria e non è possibile modificare il programma di accettare un parametro per ridurre al minimo l'unica cosa che posso pensare di fare sarebbe quello di scrivere un programma che ridurre al minimo queste applicazioni dopo che il sistema operativo li è iniziata.

Ha avuto un momento davvero difficile trovare una buona risposta a questa, finalmente trovato in un libro veramente vecchio. Su mia richiesta Forme, appena aperto le Program.cs e cambiato

Application.Run(new Form1());

a

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

e si apre senza sfarfallio direttamente al vassoio. Questa applicazione è stata più solo un servizio, in modo da impostare per avere solo un notificare icona e pulsante di uscita quando destro cliccato. Spero che questo aiuta !!

Do normalmente non rivivere vecchie discussioni, ma in un modo semplice tra cui minimizzare al vassoio del sistema, per WPF in questo modo:

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

La classe Window:

  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;

    }

Ha lavorato prima volta in modo doveva posta. Sto utilizzando WPF NotifyIcon, quindi, perché ho avuto bisogno di andare al vassoio del sistema all'avvio di Windows.

Ho strugled con lo stesso problema, e ha trovato una soluzione di lavoro:

Nel vostro program.cs, gestire il parametro, e quindi passare tale parametro 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"));
    }
}

Nel vostro Form1.cs, è possibile chiamare una funzione con il parametro passato e ridurre al minimo l'applicazione:

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

Ad esempio, con questa funzione ho usato, se si avvia l'applicazione con il parametro -minimized, allora inizierà ridotto al minimo, un NotifyIcon apre nella barra delle applicazioni e una bolla dire l'applicazione è avviato e in esecuzione in background.

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

}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top