首页 > 解决方案 > Pin To Taskbar hack:在 1903 年再次被破坏

问题描述

我已经成功地使用这个小技巧在 Windows 10 中以编程方式 PinToTaskbar。

$workingTarget = 'C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories\WordPad.lnk'

$lmPropertyValue =  '{90AA3A4E-1CBA-4233-B8BB-535773D48449}'
$userClassKeys = (Get-Item 'HKCU:\SOFTWARE\Classes').OpenSubKey('*', $true)
$shellKey = $userClassKeys.CreateSubKey('shell', $true)
$verbKey = $shellKey.CreateSubKey('PxToolsWin10PinToTaskbar', $true)
$verbKey.SetValue('ExplorerCommandHandler', $lmPropertyValue)

$shell = New-Object -ComObject "Shell.Application"
$folder = $Shell.Namespace((Get-Item $workingTarget).DirectoryName)
$item = $folder.ParseName((Get-Item $workingTarget).Name)
$item.InvokeVerb("PxToolsWin10PinToTaskbar")


# Remove the temporary shell and verb keys
Remove-Item -path:'HKCU:\SOFTWARE\Classes\*\shell\PxToolsWin10PinToTaskbar' -recurse -force

它运行良好,直到 1903 年更新。我已经验证 GUID 没有改变,它仍然引用 pinToTaskbar,所以不确定微软改变了什么,但希望有人对如何在最新版本中进行这项工作提出建议。

对于它的价值,我知道微软似乎认为办公室的 IT 不应该这样做,或者更正确地说,开发人员不应该这样做,而且微软笨拙的解决方案也阻止了公司的 IT。我觉得这很有趣,因为微软没有阻止 Autodesk 将东西放在所有用户桌面上,而非本地管理员用户已登录,在我看来,这是一种更多的用户敌对行为。我的目标是固定到用户的任务栏,提醒他们注意新软件,同时允许他们在初始固定后按照他们认为合适的方式管理那些固定的项目。微软的正确答案是一个组策略,我可以专门启用某些程序来允许这样做,而所有其他程序都被阻止。但据我所知,这仍然不是一个选择,所以我一直在寻找古怪的解决方法来维护所需的功能。:(

标签: powershellwindows-10

解决方案


基本上这是因为IContextMenu::InvokeCommand实现检查调用者是否是explorer.exe. 人们已经使用 PEB 操作来解决这个问题,但它非常复杂。

我最近观察了 Microsoft Edge (Chromium) 如何以编程方式设法固定到任务栏。这是我关于它的博客条目。

重要的。任何获得此知识的人都不应在未经主动和明确同意的情况下尝试将您编写的程序固定给用户。

但是,让我们回到 OP 的真正问题。如果您只想在域中宣传新程序,则应该使用组策略。每次转发其时间戳时,都会重新应用布局 XML。您可以编辑该文件,使其 仅附加新引脚

当非本地管理员用户登录时,Microsoft 并未阻止 Autodesk 将内容放在所有用户桌面上

不知道OP是什么意思。默认情况下,如果程序没有管理员权限,则无法编辑公共桌面。

如果 OP 意味着每次运行 Autodesk 时,它都会检查并将自己放置在公共桌面上,这意味着它已经安装了一个服务来在安装时为它执行此操作。请注意,该服务很可能是 Windows Installer 服务 --- 任何用户都可以对存储到受信任位置的软件包执行修复TrsutedInstaller,并且 Windows Installer 服务将执行修复为. 请注意,这不是安全漏洞,因为首先将包放在受信任的位置需要管理员权限。


推荐阅读