在我的应用程序中,我可以选择在 Windows 启动时启动应用程序。这很好用。我也有它,以便在最小化时将应用程序最小化到系统托盘。有没有办法让它在与 Windows 同时启动时自动最小化?我能想到的唯一方法是检索系统运行的时间量,并使用该数据来确定机器是否最近启动。显然,这个理论有很多缺陷。有人对如何做到这一点有任何其他想法吗?
4 回答
在您的程序中实现一个命令行开关,使您的程序最小化到托盘。当您使用 Windows 启动程序启动程序时,只需包含开关即可。
在 WindowState 中的“属性”表单中更改为“最小化”,或在代码中:
//After this:
InitializeComponent();
//Place this line:
WindowState = FormWindowState.Minimized;
希望这有帮助!
使用命令行参数,例如 /startminimised。在您的应用程序中,在应用程序启动时检查此开关是否存在(使用Environment.GetCommandLineArgs
),如果存在该开关,则自动最小化。
然后在“启动时运行”选项中,确保使用此开关启动应用程序,例如将运行注册表项或启动组快捷方式设置为myapp.exe /startminimised
.
但是,当用户运行您的应用程序时,他们不会(通常!)指定开关,因此应用程序将显示为一个窗口。
您可以使用参数调用程序,例如“-minimized”,然后在程序中处理该参数:
在您的 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();
SetStartup(); //This function will set your app in the registry to run on startup. I'll explain this function below.
MinimizeApp(parameter);
}
例如,使用我使用的这个函数,如果您使用 -minimized 参数启动应用程序,那么它将开始最小化,任务栏中会弹出一个通知图标,并显示一个气泡,说明应用程序已启动并在后台运行。
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();
}
}
SetStartup 函数将您的程序放入注册表,因此它将在启动时运行。
private void SetStartup(){
Microsoft.Win32.RegistryKey key;
key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
key.SetValue(AppName, Application.ExecutablePath.ToString());
string ApplicationPath = "\"" + Application.ExecutablePath.ToString() + "\" -minimized";
key.SetValue("MyApplicationName", ApplicationPath);
key.Close();
}
现在,当您使用 -minimized 参数启动程序时,例如:“c:/programs/app.exe” -minimized 然后它将开始最小化,当您重新启动计算机时,它也会自动最小化。