2010-12-15 77 views
0

MINIMIZED C#運行應用程序,我得到了下面的代碼在Windows啓動時運行應用程序:在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(); 
     } 
    } 

它的工作原理。但我希望程序開始最小化(僅在Windows啓動時)。 我沒有找到一個工作代碼/很好的解釋如何做到這一點。 你能幫我嗎?

謝謝。

回答

8

你試過

this.WindowState = FormWindowState.Minimized; 

如果你想在窗口啓動時啓動最小隻有你可以添加額外的參數命令行,像myapp.exe --start-minimized,那麼你就可以分析該參數,並檢測是否需要啓動最小化或不。

+0

你也可以創建一個鏈接文件(* .lnk)來啓動最小化集合,但我更喜歡這個答案。 – VVS 2010-12-15 19:41:01

+0

如何讀取參數? – Ron 2010-12-15 20:04:40

+1

@Ron:看看這個:http://msdn.microsoft.com/en-us/library/96s74eb0(v=vs.80).aspx – DReJ 2010-12-15 20:10:05

1

由於這只是添加一個註冊表鍵到SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run導致操作系統在啓動時啓動應用程序沒有很多你可以做,除非你想啓動的應用程序接受一個命令行參數開始最小化(然後可以將該參數添加到密鑰的可執行路徑)。

如果這是一個必要的功能,並且你不能修改程序來接受一個參數來最小化我唯一能想到的做法,那就是編寫一個程序,在操作系統啓動它們之後將這些應用程序最小化。

0

不正常復古的線程,但包括最小化到系統托盤一個簡單的方法,爲WPF是這樣的:

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

你的窗口類:

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; 

    } 

曾爲第一次所以不得不帖子。我正在使用WPF notifyicon,因此爲什麼我需要它在Windows啓動時進入系統托盤。

0

想找到一個很好的答案真的很難,最終在一本非常老的書中找到了它。在我的表單應用程序,只需打開Program.cs中,改變

Application.Run(new Form1()); 

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

,不受閃爍直接打開紙盒。這個應用程序更多的只是一個服務,所以設置它只是右鍵單擊時有一個通知圖標和退出按鈕。希望這可以幫助!!

+2

問題是用最小化窗口啓動窗口啓動應用程序..你已經回答了什麼是如何運行應用程序窗口最小化..而且'f.ShowInTaskbar = false;'將使你的程序啓動不可識別,你將永遠無法看到用戶界面,如果我沒有錯。 – dotNETbeginner 2012-09-13 09:27:50

0

我已經strugled有同樣的問題,並找到了有效的解決方案:

在你program.cs,處理參數,然後將該參數傳遞到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")); 
    } 
} 

在你Form1.cs,你可以調用具有傳遞參數的函數並將應用程序最小化:

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

例如,使用此函數我用過,如果你用-minimized參數啓動應用程序,那麼它將開始最小化,在任務欄中彈出一個notifyicon圖標,並且一個泡泡說應用程序在後臺啓動並運行。

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

}