最小化系统上的Windows窗体启动

时间:2013-11-29 11:15:53

标签: c# winforms

我为它开发了一个Windows窗体应用程序和安装程序。我在我的机器上安装了该应用程序。现在,当我重新启动PC或登录计算机时,应用程序将启动并显示在桌面上。系统托盘图标也显示在sys托盘中。现在我想保持app隐藏,只有sys tray图标应该是可见的。意味着应用程序不应显示在屏幕上,但应显示系统托盘图标。我使用了“CreateProcessAsCurrentUser”方法,其中我将“STARTF_USESHOWWINDOW”的值设置为不同的值。但它仍然不起作用。另外,我没有得到在系统启动时调用哪种Application方法。是Program.cs文件中的Main()函数吗?请告诉我解决方案以及被调用的函数。

[STAThread]
    Main() function code: `static void Main()
    {
        Mutex mutex = new Mutex(false, "Application Name");
        try
        {
            if (mutex.WaitOne(0, false))
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
                AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
                Application.Run(new MainForm());
            }
            else
            {
                IntPtr pf = NativeMethods.FindWindow(null, "Application Name");
                NativeMethods.ShowWindow(pf, 0);
                NativeMethods.SetForegroundWindow(pf);
            }
        }

我已将flag的值设置如下。

[Flags]
public enum CreateProcessFlags : uint
{
     STARTF_USESHOWWINDOW = 0x00000000,
}

2 个答案:

答案 0 :(得分:0)

试试这个....把它放在你的表格中:

 protected override void SetVisibleCore(bool value)
        {
            base.SetVisibleCore(false);
        }

这将始终使表单不可见。

您需要一些逻辑来确定是否应该从应用的其他部分显示它。例如,设置一个全局bool值并修改上面的代码以使用它。

或者,您可以使用:

protected override void OnVisibleChanged(EventArgs e)
        {
            base.OnVisibleChanged(e);
            this.Visible = false;
        }

但是当你立即运行应用程序时,你会看到一些闪光。然后,再次需要控制何时使其可见,因此请检查可见属性的全局bool值,以便最终显示表单

答案 1 :(得分:0)

你试试这个吗?

private void Form1_Load(object sender, EventArgs e)
    {


        this.WindowState = FormWindowState.Minimized;
        this.Hide();
        this.ShowInTaskbar = true;

    }

然后使用notifyicon