Frage

Ich habe den folgenden Code, um die Anwendung beim Start von Windows ausgeführt wird:

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

Es funktioniert. aber ich möchte das Programm minimiert starten (bei Windows-Start nur). Ich habe nicht einen funktionierenden Code / gute Erklärung finden, wie es geht. Können Sie mir bitte helfen?

Dank.

War es hilfreich?

Lösung

Haben Sie versucht,

this.WindowState = FormWindowState.Minimized;

Wenn Sie auf Fenster minimiert starten wollen STARTUP nur können Sie zusätzliches Argument hinzufügen Kommandozeile, wie myapp.exe --start-minimized, dann können Sie diesen Parameter analysieren und festzustellen, ob Sie minimiert starten müssen oder nicht.

Andere Tipps

Da dies das Hinzufügen nur einen Registrierungsschlüssels SOFTWARE \ Microsoft \ Windows \ Currentversion \ Run, die das Betriebssystem bewirkt, dass der App beim Start starten gibt es nicht viel Sie tun können, es sei denn, die Anwendung, die Sie Start wollen einen Befehl akzeptiert Zeilenparameter minimiert starten (Sie könnten dann den Parameter auf den ausführbaren Pfad des Schlüssels hinzuzufügen).

Wenn dies ist eine notwendige Funktion und Sie können das Programm nicht ändern, um einen Parameter zu akzeptieren, das einzige, was zu minimieren ich denken kann, wäre zu tun, um ein Programm zu schreiben, die diese Anwendungen minimieren würde, nachdem das Betriebssystem sie begonnen hat.

Sie haben eine wirklich harte Zeit, um eine gute Antwort auf diese zu finden, fand schließlich in einem wirklich alten Buch. Auf meiner Forms-Anwendung, sondern nur die Program.cs geöffnet und geändert

Application.Run(new Form1());

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

und es öffnet sich ohne Flackern direkt auf das Tablett. Diese App war nur einen Service, es so auf nur mitteilen, hat Symbol und Exit-Button, wenn rechts geklickt. Hoffe, das hilft !!

normalerweise nicht alten Fäden wieder zu beleben, sondern eine einfache Möglichkeit, um System-Tray einschließlich zu minimieren, für WPF wie folgt aus:

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

Ihre Window-Klasse:

  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;

    }

Arbeitete erstes Mal Post so hat. Ich verwende WPF NotifyIcon, also warum ich es brauchte Start auf Windows System-Tray zu gehen.

Ich habe mit dem gleichen Problem strugled, und fand eine Arbeitslösung:

In Ihrem program.cs, behandeln Sie den Parameter, und dann diesen Parameter auf Form1 geben:

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

In Ihrem Form1.cs, können Sie eine Funktion mit dem übergebenen Parameter aufrufen und minimieren die App:

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

Zum Beispiel mit dieser Funktion i verwendet, wenn Sie die Anwendung mit dem -minimized Parameter starten, dann wird es beginnen minimierte, erscheint ein NotifyIcon in der Task-Leiste und eine Blase den App sagt gestartet und im Hintergrund ausgeführt wird.

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

}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top