Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过编程告诉Windows任务栏打开(或关闭)给定的工具栏?_C#_Installation_Toolbar_Taskbar_Deskband - Fatal编程技术网

C# 如何通过编程告诉Windows任务栏打开(或关闭)给定的工具栏?

C# 如何通过编程告诉Windows任务栏打开(或关闭)给定的工具栏?,c#,installation,toolbar,taskbar,deskband,C#,Installation,Toolbar,Taskbar,Deskband,我写了一个在任务栏上运行的程序。不幸的是,安装后,用户必须手动启用它。有没有办法告诉资源管理器打开(或关闭)给定的工具栏 我希望安装程序NSIS在安装完成后打开工具栏(我意识到需要一个插件) 我还想知道是否有可能为所有用户自动启用工具栏,例如在多个用户共享一台电脑的公司环境中。我现在找不到确切的url,但我记得在PDC2008前后有过一些关于这方面的讨论,其中基本上没有专门启用这一功能,因此在没有用户同意的情况下,随机程序无法填充任务栏 这样做的一个副作用是,默认情况下很少有用户启用WMP de

我写了一个在任务栏上运行的程序。不幸的是,安装后,用户必须手动启用它。有没有办法告诉资源管理器打开(或关闭)给定的工具栏

我希望安装程序NSIS在安装完成后打开工具栏(我意识到需要一个插件)


我还想知道是否有可能为所有用户自动启用工具栏,例如在多个用户共享一台电脑的公司环境中。

我现在找不到确切的url,但我记得在PDC2008前后有过一些关于这方面的讨论,其中基本上没有专门启用这一功能,因此在没有用户同意的情况下,随机程序无法填充任务栏

这样做的一个副作用是,默认情况下很少有用户启用WMP deskbar

你可能想。看起来您只能在Vista中使用。

  • Vista+有API来实现这一点,并且
  • 编辑:此代码现在可以添加deskband对象(来自Pinvoke.net和MSDN论坛问题):

例如,使用:

Guid address_toolbar_guid = new Guid("{01E04581-4EEE-11D0-BFE9-00AA005B4383}");
uint band_id = AddDeskbandToTray(address_toolbar_guid);

对RemoveBand的类似调用也会起作用,这是有道理的,但到目前为止,我还不能让代码正常工作。另一个问题:添加deskband的应用程序关闭时,添加的deskband将关闭。

据我所知,任务栏位置和值等存储在注册表中(忘记了确切位置)因此,如果您找到了特定的注册表项,您可以确定其位置,并让安装程序在计算机上插入注册表项,以便启用任务栏。

这并不是对您的问题的回答,但请:不要在.NET中编写外壳扩展(任务栏是外壳扩展)


基本上,你正在破坏其他应用程序。

如果你检查得好,google toolband存在,而一个exe正在运行(GoogleDesktop.exe),因此如果你坚持google或搜索栏的实例化方式,你应该再次检查TrayBandSiteService并制作一个支持exe…

我认为一定有办法做到这一点,因为我见过几个微软安装程序(比如搜索)和谷歌自动打开他们的工具栏。嗯,总是有可能有一些方法可以做到这一点,当然不受支持,也不能保证在将来的版本中工作。IBandSite界面呢?我还没有找到任何关于如何使用SetBandState方法的例子,但它似乎有潜力。IBandSite确实起了作用,至少在添加deskband时是这样。代码已更新。工具栏就是应用程序,因此,当打开工具栏的应用程序关闭时,如果工具栏消失,工具栏将不起作用。我更多的是寻找像微软搜索安装程序或谷歌桌面安装程序这样的永久打开工具栏的东西。只是为了记录,这段代码并不能满足我的需要。AddBand方法不会在调用应用程序关闭后使工具栏保持加载状态。这在我的系统上非常有效,但在我的应用程序的某些最终用户系统上,
CreateInstance
抛出一个COMException,错误代码为80040154。知道是什么原因吗?我其实很清楚为什么不这么做(至少我现在知道了,我刚开始的时候没有)。我是自学成才的程序员,没有C/C++方面的经验。我从VB.NET开始上课,自学了C。
Guid address_toolbar_guid = new Guid("{01E04581-4EEE-11D0-BFE9-00AA005B4383}");
uint band_id = AddDeskbandToTray(address_toolbar_guid);