Vista 以后微软在任务栏加入了新的快速启动功能(可能叫快速启动已经不合适了),程序需要人为的去手动点击固定到任务栏或从任务栏取消固定,且微软没有提供任何接口让用户在后台静默设定默认的快速启动程序,这也是为了保护任务栏的生态,不被一些恶意软件强制修改。但如果你必须要通过静默的方式实现这个功能怎么办?别着急,使用以下脚本即可解决你的问题。
代码语言:javascript复制#Region ;**** 参数创建于 ACNWrapper_GUI ****
#PRE_UseX64=n
#PRE_Res_requestedExecutionLevel=None
#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
#include <WinAPI.au3>
#include <Constants.au3>
_PinTaskbar(@WindowsDir & 'notepad.exe')
Func _PinTaskbar($File, $Pin = True)
If @OSBuild < 7600 Then Return SetError(1) ; Windows 7 only
If Not FileExists($File) Then Return SetError(2)
local $sFolder = StringRegExpReplace($File, "(^.*\)(.*)", "1")
local $sFile = StringRegExpReplace($File, "^.*\", "")
local $oShell = ObjCreate("Shell.Application")
local $oFolder = $oShell.NameSpace($sFolder)
local $oFolderItem = $oFolder.ParseName($sFile)
local $oFolderItemVerbs = $oFolderItem.Verbs
local $hInstance = _WinAPI_LoadLibraryEx("shell32.dll", $LOAD_LIBRARY_AS_DATAFILE)
local $DoVerb = ''
If $hInstance Then
IF $Pin = 1 Then
local $DoVerb = _WinAPI_LoadString($hInstance, 5386)
Else
local $DoVerb = _WinAPI_LoadString($hInstance, 5387)
EndIf
_WinAPI_FreeLibrary($hInstance)
EndIf
IF $DoVerb = '' Then Return SetError(3) ; $DoVerb string couldn't received
For $i = 0 To $oFolderItemVerbs.Count - 1
If $oFolderItemVerbs.Item($i).Name = $DoVerb Then
$oFolderItemVerbs.Item($i).DoIt
Return
EndIf
Next
Return SetError(4) ; $DoVerb string not in menu
EndFunc
程序借助 Shell 模拟实现了用户的操作,但用户无任何感知,相当于静默实现的。_PinTaskbar
函数第一个参数是你要固定或取消固定的程序,第二个参数是一个带有默认值的参数,为 True 是固定到任务栏,为 False 是从任务栏取消固定。要注意的是,此功能在 Win10 上并不生效。