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