Pin to Taskbar
Option Explicit 'Const CSIDL_COMMON_PROGRAMS = &H17 Dim ShellApp, FSO, Desktop Set ShellApp = CreateObject("Shell.Application") Set FSO = CreateObject("Scripting.FileSystemObject") 'Set StartMenuFolder = ShellApp.NameSpace(CSIDL_COMMON_PROGRAMS) Set Desktop = ShellApp.NameSpace("C:\Users\Wayne\Desktop") Dim LnkFile LnkFile = Desktop.Self.Path&"\ScheduleNotifier.lnk" If(FSO.FileExists(LnkFile)) Then Dim tmp, verb 'For Each verb in Desktop.ParseName("ScheduleNotifier.lnk").Verbs 'tmp = tmp&verb&chr(13) 'Next 'MsgBox(tmp) Dim desktopImtes, item Set desktopImtes = Desktop.Items() For Each item in desktopImtes If (item.Name = "ScheduleNotifier") Then 'MsgBox(item.Name) For Each verb in item.Verbs If (verb.Name = "Pin to Tas&kbar") _ Then 'If (verb.Name = "锁定到任务栏(&K)") verb.DoIt End If Next End If Next End If Set FSO = Nothing Set ShellApp = Nothing
Unpin from Taskbar
Option Explicit 'Const CSIDL_COMMON_PROGRAMS = &H17 Dim ShellApp, FSO, Desktop Set ShellApp = CreateObject("Shell.Application") Set FSO = CreateObject("Scripting.FileSystemObject") 'Set StartMenuFolder = ShellApp.NameSpace(CSIDL_COMMON_PROGRAMS) Set Desktop = ShellApp.NameSpace("C:\Users\Wayne\Desktop") Dim LnkFile LnkFile = Desktop.Self.Path&"\ScheduleNotifier.lnk" If(FSO.FileExists(LnkFile)) Then Dim tmp, verb 'For Each verb in Desktop.ParseName("ScheduleNotifier.lnk").Verbs 'tmp = tmp&verb&chr(13) 'Next 'MsgBox(tmp) Dim desktopImtes, item Set desktopImtes = Desktop.Items() For Each item in desktopImtes If (item.Name = "ScheduleNotifier") Then 'MsgBox(item.Name) For Each verb in item.Verbs If (verb.Name = "Unpin from Tas&kbar") _ Then 'If (verb.Name = "从任务栏脱离(&K)") verb.DoIt End If Next End If Next End If Set FSO = Nothing Set ShellApp = Nothing
Although two snippets of VBS code are simple and straight-forward, they have one serious limitation. It only supports one specified language, attention of this line of code:
If (verb.Name = "Pin to Tas&kbar") Then 'If (verb.Name = "锁定到任务栏(&K)")
Pin program to taskbar using PS in Windows 10
If WScript.Arguments.Count < 1 Then WScript.Quit
'----------------------------------------------------------------------
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFile = WScript.Arguments.Item(0)
sKey1 = "HKCU\Software\Classes\*\shell\{:}\\"
sKey2 = Replace(sKey1, "\\", "\ExplorerCommandHandler")
'----------------------------------------------------------------------
With WScript.CreateObject("WScript.Shell")
KeyValue = .RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer" & _
"\CommandStore\shell\Windows.taskbarpin\ExplorerCommandHandler")
.RegWrite sKey2, KeyValue, "REG_SZ"
With WScript.CreateObject("Shell.Application")
With .Namespace(objFSO.GetParentFolderName(objFile))
With .ParseName(objFSO.GetFileName(objFile))
.InvokeVerb("{:}")
End With
End With
End With
.Run("Reg.exe delete """ & Replace(sKey1, "\\", "") & """ /F"), 0, True
End With
'----------------------------------------------------------------------
Param($Target)
$KeyPath1 = "HKCU:\SOFTWARE\Classes"
$KeyPath2 = "*"
$KeyPath3 = "shell"
$KeyPath4 = "{:}"
$ValueName = "ExplorerCommandHandler"
$ValueData = (Get-ItemProperty("HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\" +
"Explorer\CommandStore\shell\Windows.taskbarpin")).ExplorerCommandHandler
$Key2 = (Get-Item $KeyPath1).OpenSubKey($KeyPath2, $true)
$Key3 = $Key2.CreateSubKey($KeyPath3, $true)
$Key4 = $Key3.CreateSubKey($KeyPath4, $true)
$Key4.SetValue($ValueName, $ValueData)
$Shell = New-Object -ComObject "Shell.Application"
$Folder = $Shell.Namespace((Get-Item $Target).DirectoryName)
$Item = $Folder.ParseName((Get-Item $Target).Name)
$Item.InvokeVerb("{:}")
$Key3.DeleteSubKey($KeyPath4)
if ($Key3.SubKeyCount -eq 0 -and $Key3.ValueCount -eq 0) {
$Key2.DeleteSubKey($KeyPath3)
}
https://stackoverflow.com/questions/31720595/pin-program-to-taskbar-using-ps-in-windows-10