首页 > 解决方案 > 以编程方式(显示和)配置 Win 10 任务栏上的快速启动工具栏

问题描述

我正在尝试从命令行/批处理文件/注册表补丁/PowerShell脚本/VBS/C#/C++显示和配置Win 10任务栏上的快速启动工具栏。在网上搜索后,我能够完成三个步骤中的两个:

  1. "%USERPROFILE%\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch"使用我希望在快速启动工具栏中显示的 .lnk 文件预先填充文件夹 - 这很容易。
  2. 通过将特定 blob 添加到HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Streams\Desktop键、TaskbarWinXP值并重新启动资源管理器以使更改生效,强制快速启动在任务栏上显示。没有记录 blob 的格式,但这与我无关 - 我只需要确保任务栏只包含快速启动工具栏而没有其他工具栏,所以我可以在测试机器上准备任务栏,导出 blob,然后将其导入目标计算机上的注册表。快速启动工具栏确实显示在任务栏上,并显示了与 .lnk 文件对应的所有链接。不是最优雅的方式,但它有效。

更新 0:实际上它并没有真正起作用 - 帐户名称在 blob 中被硬编码为快速启动文件夹路径的一部分,因此当从测试机器移动到目标机器时,如果用户名,blob 将无法工作与目标机器不同。我想我无论如何都需要对 blob 格式进行逆向工程以生成正确的格式。

  1. 但是,这就是我卡住的地方,快速启动工具栏需要以编程方式进一步配置,特别是:
    • 隐藏工具栏标题
    • 隐藏链接图标的单个文本
    • 将工具栏一直向左移动,使其位于“开始”按钮旁边

我找不到任何食谱。

这些设置并没有存储在HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Streams\Desktopkey、TaskbarWinXPvalue blob中,我在手动更改前后对这个blob的不同版本进行了二进制比较,它们是相同的。它们必须存储在其他地方。

更新 1:我错了,这些值存储在 blob 中,但Windows 资源管理器不会立即将它们提交到注册表。似乎资源管理器将这些值保存在 RAM 中,并且仅在正常终止时(例如在注销或重新启动期间)将它们提交到注册表。如果您通过 killtask 终止 Explorer,它不会提交这些更改。

我还尝试使用 SysInternals procmon64 监视系统,同时使用鼠标手动执行这三个操作。在这种手动操作期间,进程监视器不会检测到任何有意义的和相关的注册表或文件活动,只有一堆背景噪音。但是资源管理器必须将这些更改的设置存储在某个地方......我错过了什么?

更新 2:正如我在更新 1 中提到的,我在手动创建工具栏时看不到任何注册表流量的原因是资源管理器将注册表提交推迟到正常关闭。

所以,在所有更新之后,我的情况完全相反:我不再遇到第 3 项的问题,但我确实需要知道存储在注册表HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Streams\DesktopTaskbarWinXPvalue 中的 blob 的格式。或者一个合适的 API 来创建这样的 blob。有人有任何指示吗?

标签: windows-10taskbarquicklaunch

解决方案


好的,我已经解决了我的问题。而且我不必为此对 blob 格式进行逆向工程(尽管我已经开始了这个有趣的过程并设法了解了一些关于其内部结构的东西)。无论如何,我的解决方案是这样的:

  1. 在干净的测试机器上,使用鼠标手动创建快速启动工具栏,但是,当被要求指定工具栏文件夹的路径时,而不是逐步导航到C:\Users\<insert_your_fixed_username_here>\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch,这会将固定的用户名提交到 blob 中作为路径,您需要"%USERPROFILE%\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch"在“选择文件夹”对话框中指定为一行(在这种情况下,“选择文件夹”对话框的起始位置并不重要)。当您这样做时,Explorer 将创建一个未硬编码当前用户名的 blob,而是将环境变量%USERPROFILE%名称放置在 blob 中。这使得 Blob 可重复用于我想要部署快速启动工具栏的任何用户。
  2. 以您想要的方式调整快速启动(标题、文本、位置、宽度、图标顺序)。
  3. 从您在测试机器上的帐户注销并重新登录。这非常重要 - 如果您不注销或杀死 Explorer,它不会将您的新工具栏设置提交到注册表。
  4. 将注册表中的密钥导出HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Streams\Desktop到 .reg 文件中以供将来使用。

剩下的很简单,编写一个批处理文件,执行以下操作:

  1. 对于目标机器上的每个给定用户,准备"C:\Users\<insert_your_fixed_username_here>\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch"文件夹并在其中放置必要的 .lnk 文件并删除不必要的文件。
  2. 将 .reg 文件导入目标机器注册表(reg import命令)。
  3. 杀死并重新启动资源管理器:taskkill /f /IM explorer.exe & start explorer.exe

现在,目标计算机上的任何所需用户都将拥有一个快速启动工具栏,而没有其他无意义的工具栏!工具栏将具有您想要的外观和感觉。

在真机和虚拟机上测试过,效果一样好。

警告:未在非英文版 Win10 上进行测试,我预计会出现本地化问题,因为现在某些文件夹名称是硬编码的。


推荐阅读