Programmatically PIN shortcut onto Taskbar on Win7
July 17, 2010 6 Comments
During my work I got one requirement of pinning a specific shortcut file (*.lnk) onto the Windows 7 Taskbar, after investigating I found programmtically achive this is “not permitted”, refer MSDN article: http://msdn.microsoft.com/en-us/library/dd378460(VS.85).aspx
A small set of applications are pinned by default for new installations. Other than these, only the user can pin further applications; programmatic pinning by an application is not permitted.
However, the exception comes from Windows Script Hosting, a snippet of VBscript can achieve my requirement, I read several articles (refer the end of this post) and wrote two VBS scripts showing below:
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 stright-forward, they has on serious limitation, it only support one specified language, attention of this line of code:
If (verb.Name = "Pin to Tas&kbar") Then 'If (verb.Name = "锁定到任务栏(&K)")
On Chinese locale, I have to replace “Pin to Tas&kbar” with “锁定到任务栏(&K)”, so in order to support more languages I need to know each exact {Pin sentence} to do the pinning, you know, google translation won’t always work in this case:), so I definitely don’t want to do that…
You probably ask WHY??? Because FolderItemVerb object only has one property: Name, and Name is definitely “language sensitive“, MSDN does mention there are two more properties “Application” and “Parent” however they are “Not implemented”.
Several tips
%AppData%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar
Rem Pining OEM Welcome Center app on task barReg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\TBDEn /v SBOEM0 /t REG_EXPAND_SZ /d “SomeFile.lnk” /f
References
http://blogs.technet.com/b/deploymentguys/archive/2009/04/08/pin-items-to-the-start-menu-or-windows-7-taskbar-via-script.aspx
http://blog.ananthonline.net/?p=37
I’m using a big part of your script to solve the pin/unpin problems in one of my applications. For your further development: The German verbs are “An Tas&kleiste anheften” (pin) and “Von Tas&kleiste lösen” (unpin)
Best regards,
Monty.
Thank you for the warm-hearted sharing:)
What’s up, yup this paragraph is truly fastidious and I have learned lot of things from it concerning blogging. thanks.
Excellent resource, I also built off of your script to solve the pin/unpin problems. Your solution is the only one I found that pins to a taskbar without erasing other pins already present.
Best regards,
Paul
WOW just what I was looking for. Came here by searching for Whole Life Insurance
I can relate to some bunch of this. I have a strong stomach but this go around my tiny a single is determined to make me throw up
cinnamon rolls. I’m going in for my three hour glucose check tomorrow because the one particular hour arrived again high for pregnancy. Diabetic issues runs in my family but I have usually been hypoglycemic. I’m sure they are tests me
way also early on glucose but w/e! I will do what ever I’ve to for my Christmas bundle even though that means each my arms are bruised!