我如何可以通过程序告诉窗栏打开(或关闭)一个给定的工具栏?
题
我已经写了一个 工具条 运行上的任务栏。不幸的是,在安装后,用户已经启用。是否有一个方式告诉资源管理器打开(或关闭)一个给定的工具栏?
我想为安装程序,国家统计局,打开工具栏安装完成时(我意识到,一个插件将是必要的)。
我也想知道它是否能够自动地启用工具栏所有的用户,例如在企业环境,其中多个用户共用一个电脑。
解决方案
- 这个演示评论并通过模拟按键
- Vista有API要做到这一点,与 ShowDeskBand 和 HideDeskBand
编辑:这个代码现在可以添加一个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会也可以做到的,但作为然而,我不能让这代码的工作。另一个问题:加deskband关闭的时候应用程序,加入它关闭。
其他提示
您可能想查看这篇文章。它看起来像你可以使用的 ITrayDeskBand介面。
我现在无法找到确切的网址,但我记得有被周围PDC2008的这一些讨论,其中基本上,这样的随机程序无法填充任务栏W / O用户的同意,这是没有专门启用。
这方面的一个副作用是,很少有用户甚至能够通过默认的WMP桌面栏。
据我了解,任务栏的位置和值等被存储在注册表(忘了具体位置),所以如果你发现了特定的注册表键,你可以采取它的位置,使您的安装程序中插入计算机上的注册表项,以便在任务栏被使能。
如果你检查好了,谷歌工具条,而一个EXE运行背后(GoogleDesktop.exe)存在,所以,如果你坚持在路上或谷歌搜索栏被实例化,你应该再次检查TrayBandSiteService并作出支持的EXE ...
不隶属于 StackOverflow