当前位置:  开发笔记 > 编程语言 > 正文

有什么办法在C#中创建一个隐藏的主窗口?

如何解决《有什么办法在C#中创建一个隐藏的主窗口?》经验,为你挑选了5个好方法。

我只想要一个带有隐藏主窗口的ac#应用程序,它将处理并响应窗口消息.

我可以创建一个表单而不显示它,然后可以调用Application.Run()而不传入表单,但是如何将创建的表单挂钩到消息循环中?

还有另一种方法可以解决这个问题吗?

提前感谢任何提示!



1> 小智..:

优秀!那个链接指向了我正确的方向.这似乎有效:

        Form f = new Form1();
        f.FormBorderStyle = FormBorderStyle.FixedToolWindow;
        f.ShowInTaskbar = false;
        f.StartPosition = FormStartPosition.Manual;
        f.Location = new System.Drawing.Point(-2000, -2000);
        f.Size = new System.Drawing.Size(1, 1);
        Application.Run(f);

为了防止它显示在Alt-Tab中,您需要它作为工具窗口.不幸的是,这可以防止它最小化.但是将起始位置设置为手动并将其定位在屏幕外就可以了!


请记住,-2000,-2000非常接近某些多显示器设置的可见区域.你可能想要比这更进一步......
或者甚至可以使用Screen类中的值来确定绝对不在屏幕上的点.

2> 小智..:

在重写VC++ TaskTray应用程序的过程中,在C#.NET中,我发现以下方法真正可行以实现以下目的.

    启动时没有初始形式

    运行Message Loop,可以根据需要与Invoke/BeginInvoke一起使用,因为IsWindowHandle为true

我遵循的步骤:

    在Application.Run()中使用ApplicationContext而不是表单.有关我使用的示例,请参阅http://www.codeproject.com/Articles/18683/Creating-a-Tasktray-Application.

    在GUI Designer 中将Form的ShowInTaskbar属性设置为true.(这似乎适得其反,但它有效)

    将Form Class设置VisibleShowInTaskbar中OnLoad()方法重写为false,如下所示.

protected override void OnLoad(EventArgs e)
    {
        Visible = false; 
        ShowInTaskbar = false; 
        base.OnLoad(e);
    }



3> Maris B...:

我知道这是一个老问题,但它在谷歌排名很好,所以无论如何我都会提供我的解决方案.

我做了两件事:

private void Form_Load(object sender, EventArgs e)
{
    Opacity = 0;
}

private void Form_Shown(object sender, EventArgs e)
{
    Visible = false;
    Opacity = 100;
}



4> Tarion..:

最好的方法是在构造函数中使用以下1-2行:

this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false; // This is optional

您甚至可以在VS Property窗口中设置Minimized属性.



5> Zach Johnson..:

您可以创建一个继承自的类System.Windows.Forms.NativeWindow(提供基本的消息循环功能),并Handle在其构造函数中引用该属性以创建其句柄并将其挂钩到消息循环中.一旦拨打电话Application.Run,您就可以处理来自它的消息.

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有