日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Windows 7 任務欄開發之覆蓋圖標(Overlay Icon)

瀏覽:19日期:2023-05-31 15:23:35

當第一次使用Windows 7 時,任務欄(Taskbar)的改變可以說讓我眼前一亮。在以前版本Windows 桌面功能的基礎上,Windows 7 任務欄為我們增添了許多其他功能:Jump Lists,Window PrevIEw,Process Bar,Overlay Icon 等等。

新任務欄的功能使我們的操作更加方便快捷,在參加北京.Net俱樂部舉辦的“Windows 7 發布活動時初步了解到有關應用程序支持Windows 7 任務欄特性方面的內容。那么作為一名開發人員我們的應用程序能否實現這些功能呢?答案當然是“可以,微軟提供了方便的工具Windows API Code Pack for .NET Framework 來幫助我們完成這些開發。

本篇主要演示Overlay Icon(MSDN上直譯為“覆蓋圖標)的功能,從字面上來看也許不太明白這是什么意思,在Windows 7 中UAC 功能為系統增加了安全性,當UAC 啟動時有些應用程序的圖標上方會顯示一個盾牌標志(如下圖),沒錯這個就是Overlay Icon 功能,下面就來看看它是如何實現的。

準備工作

1. 添加一些Overlay Icon 圖片(.ico)到項目Resources 中。

2. 下載Windows API Code Pack,增加Microsoft.WindowsAPICodePack.dll 和Microsoft.WindowsAPICodePack.Shell.dll。

3. 引用Microsoft.WindowsAPICodePack.Taskbar 命名空間。

TaskbarManager.SetOverlayIcon(Icon, String) 方法

TaskbarManager 類提供了一些常用的任務欄特性設置方法,其中SetOverlayIcon 方法有三種不同的方式來設置Overlay Icon:

//用于應用程序主窗口 public void SetOverlayIcon(System.Drawing.Icon icon, string accessibilityText) { CoreHelpers.ThrowIfNotWin7(); TaskbarList.SetOverlayIcon(OwnerHandle, icon != null ? icon.Handle : IntPtr.Zero, accessibilityText); }  //用于指定窗口 public void SetOverlayIcon(IntPtr windowHandle, System.Drawing.Icon icon, string accessibilityText) { CoreHelpers.ThrowIfNotWin7(); TaskbarList.SetOverlayIcon(windowHandle, icon != null ? icon.Handle : IntPtr.Zero, accessibilityText); }  //用于指定的WPF窗口 public void SetOverlayIcon(System.Windows.Window window, System.Drawing.Icon icon, string accessibilityText) { CoreHelpers.ThrowIfNotWin7(); TaskbarList.SetOverlayIcon( (new WindowInteropHelper(window)).Handle, icon != null ? icon.Handle : IntPtr.Zero, accessibilityText); }

在程序中通過TaskbarManager.Instance.SetOverlayIcon() 即可實現Overlay Icon 效果:

Icon icon = iconList.SelectedItem as Icon; TaskbarManager.Instance.SetOverlayIcon(icon, 'Overlay Icon Demo');

如果將Icon 和 String 都設為Null 則取消Overlay Icon 效果:

TaskbarManager.Instance.SetOverlayIcon(null, null);

單窗口示例

程序運行后的狀態:

在圖標列表中選擇Overlay Icon 后的不同效果:

多窗口示例

在默認情況下,如果從父窗口中調出子窗口,其任務欄圖標是組合疊加在一起的(如下圖):

如果想為不同的窗口中實現Overlay Icon 則首先需要通過修改TestWindow 的Application ID (AppID)將兩個窗口的任務欄圖標分離開。每個運行的窗口都會有各自的AppID,用來決定任務欄圖標屬于哪個窗口。這也就是為什么當我們打開多個 Word 文檔或IE 標簽后任務欄圖標都是自動疊加在一起的,所以我們可以通過修改窗口的AppID 使任務欄圖標分開顯示。

通過使用TaskbarManager.SetApplicationIdForSpecificWindow(IntPtr windowHandle,String appID) 方法可以修改窗口的AppID。但是目前下載的Windows API 1.0.1 版本有些小問題,使得SetApplicationIdForSpecificWindow 方法根本不起作用。根源就在TaskbarNativeMethods.cs 的SetWindowProperty 方法,沒有對pv 進行任何賦值操作,導致propStore 根本沒有值,所以在該方法中增加pv.SetString(value),重新編譯并替換掉原來的 Microsoft.WindowsAPICodePack.Shell.dll 即可:

internal static void SetWindowProperty(IntPtr hwnd, PropertyKey propkey, string value) { // Get the IPropertyStore for the given window handle IPropertyStore propStore = GetWindowPropertyStore(hwnd);  // Set the value PropVariant pv = new PropVariant(); pv.SetString(value); propStore.SetValue(ref propkey, ref pv);  // Dispose the IPropertyStore and PropVariant Marshal.ReleaseComObject(propStore); pv.Clear(); }

程序改好后,就可以使用SetApplicationIdForSpecificWindow(IntPtr, String) 干活了:

Window newWindow = new TestWindow(); newWindow.Show(); WindowInteropHelper helper = new WindowInteropHelper(newWindow); IntPtr ptr = helper.Handle;TaskbarManager.Instance.SetApplicationIdForSpecificWindow(ptr, 'AppID');

修改了TestWindow 的AppID,兩個窗口的任務欄圖標才真正的完成了分離:

通過SetOverlayIcon(IntPtr, Icon, String) 來設置指定窗口(TestWindow)的Overlay Icon:

TaskbarManager.Instance.SetOverlayIcon(ptr, icon, 'Overlay Icon Demo');

分離后再來看看效果,只顯示MainWindow 圖標:

兩個窗口的圖標都顯示:

出處:http://www.cnblogs.com/gnIElee/

標簽: Windows系統
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美日韩国产免费观看视频| 激情久久五月| 日韩制服丝袜先锋影音| 9色国产精品| 深夜日韩欧美| 国产精品一二| 国产一区二区三区四区| 麻豆视频在线看| 久久婷婷久久| 先锋影音国产一区| 日日夜夜免费精品视频| 国产欧美一区| 91tv亚洲精品香蕉国产一区| 久久青草久久| 一区二区国产在线观看| 国产午夜精品一区在线观看| 精品五月天堂| 亚洲一区二区毛片| 国产伦理一区| 99免费精品| 亚洲三级网站| 中文av在线全新| 免费观看日韩电影| 久久久免费人体| 欧美另类中文字幕 | 国产精品地址| 欧美午夜不卡| 国产精品传媒麻豆hd| 久久影院一区| 国产亚洲一区| 激情六月综合| 国产精品igao视频网网址不卡日韩| 天堂av在线| 免费一级片91| 国产一区二区三区四区| 久久xxxx精品视频| 欧美激情三区| 天堂成人国产精品一区| 日本激情一区| 日韩久久99| 欧美成人基地| 日韩在线视频一区二区三区| www.九色在线| 日本不卡不码高清免费观看 | 中文字幕一区二区三区日韩精品 | 国产精品免费看| 麻豆成人av在线| 老司机精品久久| 精品国产亚洲一区二区三区大结局| 久久久久网站| 国产精品扒开腿做爽爽爽软件| 国产99久久久国产精品成人免费| 欧美日本不卡| 欧美日韩国产精品一区二区亚洲| 国产精品蜜月aⅴ在线| 国产一区亚洲| 国精品产品一区| 亚洲精品动态| 91精品电影| 国产精品99一区二区三区| 亚洲精品国模| 亚洲一区不卡| 免费视频国产一区| 精品视频久久| 欧美在线看片| 一本一道久久a久久| 亚洲精品99| 久久精品高清| 91精品精品| 亚洲www啪成人一区二区| 老司机免费视频一区二区| 日韩高清在线观看一区二区| 久久国产88| 日韩制服丝袜先锋影音| 香蕉国产精品| 黄色av日韩| 午夜精品免费| 在线国产一区二区| 91精品国产乱码久久久久久久 | 九九久久电影| 一级欧洲+日本+国产| 久久免费黄色| 香蕉成人av| 久久九九国产| 国产在线|日韩| 久久精品亚洲欧美日韩精品中文字幕| 精品国产美女a久久9999| 久久a爱视频| 欧美亚洲人成在线| 国产精品视频一区视频二区| 亚洲资源网站| 日韩在线黄色| 欧美日韩亚洲三区| 欧美片网站免费| 国产精品一二| 精品日韩一区| 日韩和的一区二在线| 成人福利视频| 九色精品91| 蜜桃av一区二区三区电影| 一区二区三区四区日韩| 日韩在线黄色| 国产精品777777在线播放| 欧美精品99| 久久电影tv| 国产综合色区在线观看| 99久久精品网| 蜜桃一区二区三区在线观看| 日韩欧美久久| 精品国产亚洲日本| 亚洲成人二区| 中文一区一区三区免费在线观 | 久久伦理在线| 日韩精品一级二级| 日精品一区二区三区| 国产精品美女久久久久久不卡| 精品一区二区男人吃奶| www成人在线视频| 黄色亚洲在线| 日韩欧美中文字幕电影| 美女av一区| 亚洲不卡av不卡一区二区| 美日韩精品视频| 国产精品1luya在线播放| 尤物tv在线精品| 日本欧美大码aⅴ在线播放| 国产一区2区| 天堂成人免费av电影一区| 麻豆精品一区二区综合av| 久久在线电影| 国产三级精品三级在线观看国产| 97精品中文字幕| 久久最新视频| 麻豆视频久久| 99国产精品私拍| 免费日韩成人| 午夜一区在线| 麻豆国产精品777777在线| 一区二区小说| 国产精品一国产精品| 激情欧美亚洲| 欧美1区2区3| 亚洲深夜av| 国产精品99久久免费| 亚洲欧洲日本mm| 美腿丝袜在线亚洲一区| 国产午夜精品一区二区三区欧美| 欧美91在线|欧美| 免费毛片在线不卡| 你懂的网址国产 欧美| 99在线精品视频在线观看| 精品一区二区三区在线观看视频| 久久国产精品久久w女人spa| 四虎成人av| 日本午夜精品一区二区三区电影| 三上悠亚国产精品一区二区三区| 天堂俺去俺来也www久久婷婷| 日韩一区二区三区在线免费观看| 欧美午夜网站| 免费中文字幕日韩欧美| 97人人精品| 国产日韩三级| 亚洲一区二区三区在线免费| 成人午夜网址| 国产毛片精品| 四虎精品永久免费| 午夜日本精品| 日本精品影院| 成人精品动漫一区二区三区| 老鸭窝毛片一区二区三区| 亚洲成人av观看| 精品高清久久| 国产欧美三级| 97精品资源在线观看| 亚洲一区二区三区久久久| 香蕉久久99| 国产理论在线| 久久中文精品| 日韩精品一区二区三区中文字幕| 亚洲性图久久| 视频福利一区| 91综合视频| 国产精品igao视频网网址不卡日韩 | 91免费精品国偷自产在线在线| 欧美亚洲国产激情| 国产成年精品| 久久麻豆视频| 精品视频高潮| 欧美一级二区| 亚洲精品乱码日韩| 久久高清国产| 国产精品免费看| 亚洲一区欧美激情| 91久久久精品国产| 欧美亚洲激情| 亚洲精品一区二区妖精| 精品中文一区| 国产亚洲一区在线| 久久亚洲精品伦理| 蜜桃一区二区三区在线|