簡體   English   中英

如何向Windows任務欄添加內容

[英]How to add content to windows taskbar

一段時間以來,我一直試圖弄清楚如何在時鍾旁邊的任務欄中添加內容。 您可以在NetSpeedMonitor或NetWorx中查看此示例。 我是任務欄的小伙子,但無論我多么努力,我找不到任何東西。 我對ThumbButtonInfo或NotifyIcon不感興趣。 以下是任務欄中的幾個內容示例(我不是說這個權利)。 我希望能夠做類似於第一個的事情:

NetSpeedMonitor在任務欄中有文本

Networx公司

謝謝你,Rymn

在codeproject中有一個示例,顯示了使用.NET和Windows窗體的帶有對象的 E xtending Explorer

構建BandObjectLib的發行版並將其注冊到全局程序集緩存中。 最簡單的方法是在Visual Studio中打開BandObjectLib.sln,將活動配置設置為Release,然后從“Build”菜單中選擇“Rebuild Solution”。 解決方案中的第二個項目 - RegisterLib - 是一個C ++實用程序項目,它執行將組件放入GAC的'gacutil / if BandObjectLib.dll'命令。

您可能已經知道,Band Objects是COM組件。 並且要使.NET框架找到實現COM組件的程序集,它必須在GAC中注冊或位於客戶端應用程序的目錄中。 Band Objects有兩種可能的客戶端應用程序 - explorer.exe和iexplorer.exe。 資源管理器位於Windows目錄和IE“Program Files”中的某個位置。 因此,在這種情況下,GAC實際上是唯一的選擇。 因此,實現Band Objects的.NET程序集應該在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對象的時候了。 讓它成為資源管理器工具欄以及水平瀏覽器欄(也稱為瀏覽器通信頻段)。 我們需要做的就是為我們的HelloWorldBar類添加自定義BandObject屬性:

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

這足以通過“查看 - >資源管理器欄”和“視圖 - >工具欄”瀏覽器菜單使我們的控件可用。 它還處理菜單項文本 - “Hello World Bar”,並且菜單項突出顯示狀態欄顯示“顯示問候欄”。 你不喜歡聲明性編程和自定義屬性嗎?

現在是時候在Visual Studio Designer中打開HelloWorldBar.cs並對其進行一些控制。 雖然在我的HelloWorldBar版本中,我決定在其上放置一個帶有“Say Hello”標題的按鈕,您可以自由地做一些更個性化的事情。 我將按鈕的大小設置為控件客戶區的大小,並將其Anchor屬性設置為所有可能樣式的組合 - “Top,Bottom,Left,Right”。 背景顏色為“HotTrack”,ForeColor為“Info”。

BandObject控件有幾個特定於Band Objects的屬性(以及從它派生的類) - Title,MinSize,MaxSize和IntegralSize。 我將HelloWorldBar的Title設置為“Hello Bar”,並將MinSize和Size設置為'150,24'。 哦,在按鈕的On Click事件處理程序中,我放置了顯示消息框的代碼。 這是我的最終代碼看起來像(並且大部分是由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就是這樣做的。 我的SampleBars解決方案版本中名為Register的C ++實用程序項目使我無法手動使用這些工具。 它沒有文件,只是下面的構建后命令(調試版本):

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

因此,您必須確保Register項目是使用Project Dependencies / Build Order在解決方案中構建的最后一個項目。

構建解決方案並執行gacutil和regasm命令后,我們終於可以啟動資源管理器並查看我們的工具欄和資源管理器欄。 如果你做的一切正確,你應該能夠看到文章頂部的圖片。 在這張圖片中,您還可以看到HelloWorldBar在Windows任務欄中的外觀。 要實現這一點,您需要做的就是修改添加BandObjectStyle.TaskbarToolBar標志的BandObject屬性。


你也許想看看這個答案

根據微軟的說法,不推薦使用Deskbands用於Windows 7 ,盡管它們仍然有效。 另請注意,Microsoft要求Deskbands通過IDeskband2接口而不是IDeskband 在Windows 7支持Aero 此外,Micorosft已正式表示IDeskBand2可能會在后續版本的操作系統或產品中被更改或不可用。

最后, 在托管代碼中創建shell擴展時要非常小心。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM