如何向Windows任务栏添加内容

时间:2016-03-09 03:24:06

标签: c# windows taskbar

我一直试图弄清楚如何在时钟旁边的任务栏中添加内容。您可以在NetSpeedMonitor或NetWorx中查看此示例。我是任务栏的小伙子,但无论我多么努力,我找不到任何东西。我对ThumbButtonInfo或NotifyIcon不感兴趣。以下是任务栏中的几个内容示例(如果我没有说明这一点)。我希望能够做类似于第一个的事情:

NetSpeedMonitor has text in the taskbar

NetWorx

谢谢你,  Rymn

1 个答案:

答案 0 :(得分:1)

代码项目中有一个显示E xtending Explorer with Band Objects using .NET and Windows Forms

的示例
  

构建BandObjectLib的发行版并在Global中注册   程序集缓存。最简单的方法是打开   Visual Studio中的BandObjectLib.sln,将活动配置设置为   发布并选择重建解决方案'来自' Build'菜单。该   解决方案中的第二个项目 - RegisterLib - 是一个C ++实用程序   执行' gacutil / if BandObjectLib.dll的项目'命令   将汇编纳入GAC。

     

您可能已经知道,Band Objects是COM组件。并为   .NET框架,用于查找实现COM组件的程序集   它必须在GAC中注册或位于目录中   客户端应用程序。有两种可能的客户端应用程序   用于Band Objects - explorer.exe和iexplorer.exe。资源管理器位于   在Windows目录和IE里面的某个地方' Program Files'。所以   在这种情况下,GAC实际上是唯一的选择。因此.NET程序集   实现Band Objects的应该在GAC和所有人中注册   他们依赖的库 - 如BandObjectLib.dll - 也应该是   那里。

     

GAC中的程序集必须具有强名称,因此密钥对   需要。我已经为BandObjects.snk文件提供了密钥对但是   我鼓励你用自己的替换它。请参阅sn.exe工具   更多细节。

     

创建一个新的Windows Control Library项目并将其命名为SampleBars。   我们将依赖BandObjectLib的基本功能,所以我们   必须添加对BandObjectLib \ Relase \ bin \ BandObjectLib.dll的引用。   当我们正在开发一个“Hello World Bar'”时,重命名UserControl1.cs和   适当的UserControl1类 - 进入HelloWolrdBar.cs   和HelloWorldBar。同时在下面添加以下行   HelloWorldBar.cs:

using BandObjectLib;
using System.Runtime.InteropServices;
     

使HelloWorldBar类继承BandObject而不是   System.Windows.Forms.UserControl。正如我前面提到的,Band Objects   是COM组件所以我们应该使用Guid属性。使用   guidgen.exe生成您唯一的GUID,或者您可以使用我拥有的GUID   为你生成:

[Guid("AE07101B-46D4-4a98-AF68-0333EA26E113")]
     

我们还必须以强名称签署我们的集会。你可以这样做   将以下行放入AssemblyInfo.cs文件中:

[assembly: AssemblyKeyFile(@"..\..\..\BandObjects.snk")]
     

现在是决定我们想要开发哪种Band对象的时候了。   让我们成为资源管理器工具栏和水平浏览器栏   (也称为浏览器通信频段)。我们需要做的就是   实现此决定是为我们添加自定义BandObject属性   HelloWorldBar类:

[Guid("AE07101B-46D4-4a98-AF68-0333EA26E113")]
[BandObject("Hello World Bar",
BandObjectStyle.Horizontal | BandObjectStyle.ExplorerToolbar,
HelpText = "Shows bar that says hello.")]
public class HelloWorldBar : BandObject
{ ...
     

足以通过' View->资源管理器提供我们的控件   酒吧'和'查看 - >工具栏'资源管理器菜单。它还负责菜单   项目文本 - " Hello World Bar",并且菜单项突出显示   状态栏显示"显示打招呼的栏。"。不喜欢你   声明性编程和自定义属性?

     

现在是时候在Visual Studio Designer中打开HelloWorldBar.cs了   并对其进行一些控制。虽然在我的HelloWorldBar版本中我   决定点一下“Say Hello'你是谁的标题   自由地做一些更个性化的事情。我做了按钮的大小   等于控件客户区的大小,并设置其Anchor   属于所有可能风格的组合 - '顶部,底部,   左,右'。背景颜色是' HotTrack'和ForeColor是   '信息'

     

BandObject控件具有特定于Band的几个属性   对象(以及从中派生的类) - Title,MinSize,MaxSize   和IntegralSize。我将HelloWorldBar的标题设置为" Hello Bar"和   MinSize和尺寸分别为' 150,24'哦,在按钮的On Click事件中   handler我把代码显示一个消息框。这是我的决定   代码看起来像(并且大部分是由VS.Net生成的):

using System;
using System.ComponentModel;
using System.Windows.Forms;

using BandObjectLib;
using System.Runtime.InteropServices;

namespace SampleBars
{
    [Guid("AE07101B-46D4-4a98-AF68-0333EA26E113")]
    [BandObject("Hello World Bar", BandObjectStyle.Horizontal 
         | BandObjectStyle.ExplorerToolbar, HelpText = "Shows bar that says hello.")]
    public class HelloWorldBar : BandObject
    {
        private System.Windows.Forms.Button button1;
        private System.ComponentModel.Container components = null;

        public HelloWorldBar()
        {
            InitializeComponent();
        }

        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if( components != null )
                    components.Dispose();
            }
            base.Dispose( disposing );
        }

        #region Component Designer generated code
        private void InitializeComponent()
        {
            this.button1 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            // 
            // button1
            // 
            this.button1.Anchor = (((System.Windows.Forms.AnchorStyles.Top 
                | System.Windows.Forms.AnchorStyles.Bottom) 
                | System.Windows.Forms.AnchorStyles.Left) 
                | System.Windows.Forms.AnchorStyles.Right);
            this.button1.BackColor = System.Drawing.SystemColors.HotTrack;
            this.button1.ForeColor = System.Drawing.SystemColors.Info;
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(150, 24);
            this.button1.TabIndex = 0;
            this.button1.Text = "Say Hello";
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // HelloWorldBar
            // 
            this.Controls.AddRange(new System.Windows.Forms.Control[] { this.button1 });
            this.MinSize = new System.Drawing.Size(150, 24);
            this.Name = "HelloWorldBar";
            this.Size = new System.Drawing.Size(150, 24);
            this.Title = "Hello Bar";
            this.ResumeLayout(false);

        }
        #endregion

        private void button1_Click(object sender, System.EventArgs e)
        {
            MessageBox.Show("Hello, World!");
        }
    }
}
     

好的,现在我们已经准备好构建SampleBars.dll,但还不够   它在探险家中。我们也必须将我们的组件放入GAC   将其注册为COM服务器。有工具 - gacutil.exe和   regasm.exe就是这样做的。名为Register的C ++实用程序项目   在我的SampleBars解决方案版本中解放了我使用它们   手动工具。它没有文件,只是下面的后期构建   命令(调试版):

cd $(ProjectDir)..\bin\Debug
gacutil /if SampleBars.dll
regasm SampleBars.dll
     

原因是你必须确保Register项目是最后一个   使用Project Dependencies / Build Order在解决方案中构建。

     

构建解决方案后,执行gacutil和regasm   命令,我们终于准备启动资源管理器并查看我们的工具栏   和探险家酒吧。如果你做的一切正确,你应该能够   看到文章顶部的图片。就这个   你还可以看到HelloWorldBar在Windows中的外观   任务栏。要实现这一点,您需要做的就是修改BandObject   添加BandObjectStyle.TaskbarToolBar标志的属性。

您也可以查看this answer

  

根据微软的说法Deskbands are not recommended for Windows 7,尽管它们仍然有用。还要记住微软   通过IDeskband2要求Deskbands support Aero on Windows 7   接口,而不是IDeskband。此外,Micorosft已正式表示   那IDeskBand2 may be altered or unavailable in subsequent versions of the operating system or product.

     

最后,要非常小心creating shell extensions in managed code