簡體   English   中英

我如何以編程方式告訴Windows任務欄打開(或關閉)給定的工具欄?

[英]How can I programatically tell Windows taskbar to open (or close) a given toolbar?

我寫了一個在任務上運行的工具欄。 不幸的是,安裝后,用戶必須手動啟用它。 有沒有辦法告訴資源管理器打開(或關閉)給定的工具欄?

我希望安裝程序NSIS在安裝完成時打開工具欄(我意識到需要一個插件)。

我還想知道是否可以為所有用戶自動啟用工具欄,例如在多個用戶共享PC的企業環境中。

  • 此CodeProject注釋通過模擬按鍵來完成
  • Vista +使用ShowDeskBandHideDeskBand進行API
  • 編輯:此代碼現在可以添加一個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桌面欄。

根據我的理解,任務欄位置和值等存儲在注冊表中(忘記確切的位置),因此如果找到特定的注冊表項,您可以獲取其位置並使安裝程序在計算機上插入注冊表項,以便啟用任務欄。

不是一個真正的回答你的問題,但是請,請: 不要寫外殼擴展(和任務欄是一個外殼擴展)在.NET中!

這就是原因

基本上,你打破其他應用程序。

如果你檢查得好,谷歌工具帶存在,而exe后面運行(谷歌桌面版),所以如果你堅持谷歌或搜索欄實例化的方式,你應該再次檢查TrayBandSiteService並制作支持exe ...

暫無
暫無

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

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