![](/img/trans.png)
[英]Given an Object, How can I programatically tell what Interfaces it supports?
[英]How can I programatically tell Windows taskbar to open (or close) a given toolbar?
編輯:此代碼現在可以添加一個deskband對象(來自Pinvoke.net,以及這 兩個 MSDN論壇問題):
[ComImport] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] [Guid("4CF504B0-DE96-11D0-8B3F-00A0C911E8E5")] public interface IBandSite { [PreserveSig] uint AddBand([In, MarshalAs(UnmanagedType.IUnknown)] Object pUnkSite); [PreserveSig] void RemoveBand(uint dwBandID); } private uint AddDeskbandToTray(Guid Deskband) { Guid IUnknown = new Guid("{00000000-0000-0000-C000-000000000046}"); Guid ITrayBand = new Guid("{F60AD0A0-E5E1-45cb-B51A-E15B9F8B2934}"); Type TrayBandSiteService = Type.GetTypeFromCLSID(ITrayBand, true); IBandSite BandSite = Activator.CreateInstance(TrayBandSiteService) as IBandSite; object DeskbandObject = CoCreateInstance(Deskband, null, CLSCTX.CLSCTX_INPROC_SERVER, IUnknown); return BandSite.AddBand(DeskbandObject); }
並且,使用示例:
Guid address_toolbar_guid = new Guid("{01E04581-4EEE-11D0-BFE9-00AA005B4383}");
uint band_id = AddDeskbandToTray(address_toolbar_guid);
對RemoveBand的類似調用也可以做到這一點是有意義的,但到目前為止,我無法使代碼工作。 另一個問題:當添加它的應用程序關閉時,添加的桌面帶關閉。
您可能想看看這篇文章 。 看起來您只能使用ITrayDeskBand界面在Vista中執行此操作(無論如何“正式”)。
我現在找不到確切的網址,但是我記得在PDC2008周圍有一些討論,基本上沒有特別啟用,因此隨機程序無法在用戶同意的情況下填充任務欄。
這樣做的副作用是,極少數用戶甚至默認啟用WMP桌面欄。
根據我的理解,任務欄位置和值等存儲在注冊表中(忘記確切的位置),因此如果找到特定的注冊表項,您可以獲取其位置並使安裝程序在計算機上插入注冊表項,以便啟用任務欄。
如果你檢查得好,谷歌工具帶存在,而exe后面運行(谷歌桌面版),所以如果你堅持谷歌或搜索欄實例化的方式,你應該再次檢查TrayBandSiteService並制作支持exe ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.