Comment épingler une icône Flip 3D à la barre des taches Windows 7 par VBScript.
Dans le cas d'un réseau avec des client Windows 7 il peut être utile de contrôler l’apparence du bureau des ordinateurs clients quand l’utilisateur se connecte pour la première fois. Une des actions possibles est d’ajouter les éléments épinglés qui apparaissent sur la barre des taches Windows 7.
Le point essentiel de ce script réside dans la manière dont le raccourci vers Flip 3D est crée. Comme il est précisé dans le Technet forum on peut y arriver en créant un raccourci vers rundll32.exe DwmApi #105.
Dès lors que l’on est sur que ce raccourci existe on peut l’épingler sur la barre des taches. Ceci est effectué par une méthode assez particulière. Chaque objet FolderItem a une propriété collection appelée .Verbs. Elle représente en fait les raccourcis on peut cliquer dessus dans le menu contextuel (ou RightClick menu). On peut exécuter une commande dans ce menu en utilisant la méthode .DoIt de l’objet Verb correspondant. Le script est assuré de n’être exécuter qu’une seule fois par la création d’un fichier de control. Une fois le script exécuté l’utilisateur devrait être capable de décider quels éléments il veut voir apparaître sur la barre des taches. C'est la raison pour laquelle on ne veut pas que le script soit exécuté à chaque fois que l’on se connecte.
Evidemment on peut ajouter plusieurs items sur la barre des taches par cette méthode. Si vous souhaitez contrôler l’ordre dans lequel les items sont presenté il faut commencer par supprimer d'abord tous les items et puis les remplacez dans l’ordre désiré.
Option Explicit
Const CSIDL_COMMON_PROGRAMS = &H17
Const CSIDL_PROGRAMS = &H2
Const CSIDL_STARTMENU = &HB
'Const sUnpinFromTaskBar=""Unpin from Taskbar"
Const sUnpinFromTaskBar="Van de taakbalk losmaken"
'this should be the exact verb in the context menu in the language of your Windows 7 version, so
'in this case Dutch
Const sPinToTaskBar="Aan de taakbalk vastmaken"
'If OK file is present in %USERPROFILE% do not execute to control one-time execution for a certain
'user on this machine
Const sOKFile="PinnedItems15-12-11.ok"
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const bDebug = False
Dim oShell, oFSO
Dim oCurrentUserStartFolder
Dim sCurrentUserStartFolderPath
Dim oAllUsersProgramsFolder
Dim sAllUsersProgramsPath
Dim oFolder
Dim oFolderItem
Dim colVerbs
Dim oVerb
Dim Msg,f
Dim sPathOKFile
Dim oWshShell
If bDebug = True Then MsgBox OSVersion
If Not Instr(1,OSVersion,"Windows 7",1)>0 Then WScript.Quit
Set oShell = CreateObject("Shell.Application")
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oCurrentUserStartFolder = oShell.NameSpace (CSIDL_STARTMENU)
sCurrentUserStartFolderPath = oCurrentUserStartFolder.Self.Path
Set oAllUsersProgramsFolder = oShell.NameSpace(CSIDL_COMMON_PROGRAMS)
sAllUsersProgramsPath = oAllUsersProgramsFolder.Self.Path
Set oWshShell = WScript.CreateObject ("WSCript.shell")
sPathOKFile= oWshShell.ExpandEnvironmentStrings("%USERPROFILE%") & "\" & sOKFile
'If OK file exists end execution
If oFSO.FileExists(sPathOKFile) Then
If bDebug Then
MsgBox "Execution aborted because OK file is present as: " & sPathOKFile,,"28"
Else
WScript.Quit
End If
End If
' - Remove pinned items -
'Remove items IE en Media Player from taskbar if present and add again to control the order in which
'they appear on the taskbar.
'Internet Explorer
If oFSO.FileExists(sCurrentUserStartFolderPath & "\Programs\Internet Explorer.lnk") Then
Set oFolder = oShell.Namespace(sCurrentUserStartFolderPath & "\Programs")
Set oFolderItem = oFolder.ParseName("Internet Explorer.lnk")
Set colVerbs = oFolderItem.Verbs
For Each oVerb in colVerbs
If bDebug Then
Msg = Msg & vbCrLf & oVerb.name
End If
If Replace(oVerb.name, "&", "") = sUnpinFromTaskBar Then
oVerb.DoIt
If bDebug = False Then Exit For
End If
Next
If bDebug Then MsgBox Msg
End If
'Windows Media Player
If oFSO.FileExists(sAllUsersProgramsPath & "\Windows Media Player.lnk") Then
Set oFolder = oShell.Namespace(sAllUsersProgramsPath)
Set oFolderItem = oFolder.ParseName("Windows Media Player.lnk")
Set colVerbs = oFolderItem.Verbs
For Each oVerb in colVerbs
If bDebug Then
Msg = Msg & vbCrLf & oVerb.name
End If
If Replace(oVerb.name, "&", "") = sUnpinFromTaskBar Then
oVerb.DoIt
If bDebug = False Then Exit For
End If
Next
If bDebug Then MsgBox Msg
End If
' - Pin to Taskbar -
'Microsoft Outlook 2007
If oFSO.FileExists(sAllUsersProgramsPath & "\Microsoft Office\Microsoft Office Outlook 2007.lnk") _
Then
Set oFolder = oShell.Namespace(sAllUsersProgramsPath & "\Microsoft Office")
'Microsoft Office Outlook 2007
Set oFolderItem = oFolder.ParseName("Microsoft Office Outlook 2007.lnk")
Set colVerbs = oFolderItem.Verbs
For Each oVerb in colVerbs
If bDebug Then
Msg = Msg & vbCrLf & oVerb.name
End If
If Replace(oVerb.name, "&", "") = sPinToTaskBar Then
oVerb.DoIt
If bDebug = False Then Exit For
End If
Next
If bDebug Then MsgBox Msg
End If
'Microsoft Word 2007
If oFSO.FileExists(sAllUsersProgramsPath & "\Microsoft Office\Microsoft Office Word 2007.lnk") Then
Set oFolder = oShell.Namespace(sAllUsersProgramsPath & "\Microsoft Office")
Set oFolderItem = oFolder.ParseName("Microsoft Office Word 2007.lnk")
Set colVerbs = oFolderItem.Verbs
For Each oVerb in colVerbs
If bDebug Then
Msg = Msg & vbCrLf & oVerb.name
End If
If Replace(oVerb.name, "&", "") = sPinToTaskBar Then
oVerb.DoIt
If bDebug = False Then Exit For
End If
Next
If bDebug Then MsgBox Msg
End If
'Windows Explorer
If oFSO.FileExists(sCurrentUserStartFolderPath & "\Programs\Accessories\Windows Explorer.lnk") Then
Set oFolder = oShell.Namespace(sCurrentUserStartFolderPath & "\Programs\Accessories")
Set oFolderItem = oFolder.ParseName("Windows Explorer.lnk")
Set colVerbs = oFolderItem.Verbs
For Each oVerb in colVerbs
If bDebug Then
Msg = Msg & vbCrLf & oVerb.name
End If
If Replace(oVerb.name, "&", "") = sPinToTaskBar Then
oVerb.DoIt
If bDebug = False Then Exit For
End If
Next
If bDebug Then MsgBox Msg
End If
'Internet Explorer
If oFSO.FileExists(sCurrentUserStartFolderPath & "\Programs\Internet Explorer.lnk") Then
Set oFolder = oShell.Namespace(sCurrentUserStartFolderPath & "\Programs")
Set oFolderItem = oFolder.ParseName("Internet Explorer.lnk")
Set colVerbs = oFolderItem.Verbs
For Each oVerb in colVerbs
If bDebug Then
Msg = Msg & vbCrLf & oVerb.name
End If
If Replace(oVerb.name, "&", "") = sPinToTaskBar Then
oVerb.DoIt
If bDebug = False Then Exit For
End If
Next
If bDebug Then MsgBox Msg
End If
'Windows Media Player
If oFSO.FileExists(sAllUsersProgramsPath & "\Windows Media Player.lnk") Then
Set oFolder = oShell.Namespace(sAllUsersProgramsPath)
Set oFolderItem = oFolder.ParseName("Windows Media Player.lnk")
Set colVerbs = oFolderItem.Verbs
For Each oVerb in colVerbs
If bDebug Then
Msg = Msg & vbCrLf & oVerb.name
End If
If Replace(oVerb.name, "&", "") = sPinToTaskBar Then
oVerb.DoIt
If bDebug = False Then Exit For
End If
Next
If bDebug Then MsgBox Msg
End If
'Create shortcut Flip to 3D and pin to taskbar
Create_ShortCut "%SystemRoot%\System32\rundll32.exe" , "DwmApi #105" ,sCurrentUserStartFolderPath, _
"Flip 3D","",0,"%SystemRoot%\System32\imageres.dll",0
If oFSO.FileExists(sCurrentUserStartFolderPath & "\Flip 3D.lnk") Then
Set oFolder = oShell.Namespace(sCurrentUserStartFolderPath)
Set oFolderItem = oFolder.ParseName("Flip 3D.lnk")
Set colVerbs = oFolderItem.Verbs
For Each oVerb in colVerbs
If bDebug Then
Msg = Msg & vbCrLf & oVerb.name
End If
If Replace(oVerb.name, "&", "") = sPinToTaskBar Then
oVerb.DoIt
If bDebug = False Then Exit For
End If
Next
If bDebug Then MsgBox Msg
End If
'Create OK file for one-time execution
WriteToLog "",oWshShell.ExpandEnvironmentStrings("%USERPROFILE%") & "\" & sOKFile
WScript.Quit
'Microsoft Outlook 2010
If oFSO.FileExists(sAllUsersProgramsPath & "\Microsoft Office\Microsoft Outlook 2010.lnk") Then
Set oFolder = oShell.Namespace(sAllUsersProgramsPath & "\Microsoft Office")
Set oFolderItem = oFolder.ParseName("Microsoft Outlook 2010.lnk")
Set colVerbs = oFolderItem.Verbs
For Each oVerb in colVerbs
If Replace(oVerb.name, "&", "") = "Pin to Taskbar" Then oVerb.DoIt
Next
End If
'Windows Explorer
If oFSO.FileExists(sCurrentUserStartFolderPath & "\Programs\Accessories\Windows Explorer.lnk") Then
Set oFolder = oShell.Namespace(sCurrentUserStartFolderPath & "\Programs\Accessories")
Set oFolderItem = oFolder.ParseName("Windows Explorer.lnk")
Set colVerbs = oFolderItem.Verbs
For Each oVerb in colVerbs
If Replace(oVerb.name, "&", "") = "Pin to Taskbar" Then oVerb.DoIt
Next
End If
'Internet Explorer
If oFSO.FileExists(sCurrentUserStartFolderPath & "\Programs\Internet Explorer.lnk") Then
Set oFolder = oShell.Namespace(sCurrentUserStartFolderPath & "\Programs")
Set oFolderItem = oFolder.ParseName("Internet Explorer.lnk")
Set colVerbs = oFolderItem.Verbs
For Each oVerb in colVerbs
If Replace(oVerb.name, "&", "") = "Pin to Taskbar" Then oVerb.DoIt
Next
End If
'Mozilla Firefox
If oFSO.FileExists(sAllUsersProgramsPath & "\Mozilla Firefox\Mozilla Firefox.lnk") Then
Set oFolder = oShell.Namespace(sAllUsersProgramsPath & "\Mozilla Firefox")
Set oFolderItem = oFolder.ParseName("Mozilla Firefox.lnk")
Set colVerbs = oFolderItem.Verbs
For Each oVerb in colVerbs
If Replace(oVerb.name, "&", "") = "Pin to Taskbar" Then oVerb.DoIt
Next
End If
'Microsoft Word 2010
If oFSO.FileExists(sAllUsersProgramsPath & "\Microsoft Office\Microsoft Word 2010.lnk") Then
Set oFolder = oShell.Namespace(sAllUsersProgramsPath & "\Microsoft Office")
Set oFolderItem = oFolder.ParseName("Microsoft Word 2010.lnk")
Set colVerbs = oFolderItem.Verbs
For Each oVerb in colVerbs
If Replace(oVerb.name, "&", "") = "Pin to Taskbar" Then oVerb.DoIt
Next
End If
'Microsoft Excel 2010
If oFSO.FileExists(sAllUsersProgramsPath & "\Microsoft Office\Microsoft Excel 2010.lnk") Then
Set oFolder = oShell.Namespace(sAllUsersProgramsPath & "\Microsoft Office")
Set oFolderItem = oFolder.ParseName("Microsoft Excel 2010.lnk")
Set colVerbs = oFolderItem.Verbs
For Each oVerb in colVerbs
If Replace(oVerb.name, "&", "") = "Pin to Taskbar" Then oVerb.DoIt
Next
End If
'Microsoft Outlook 2010
If oFSO.FileExists(sAllUsersProgramsPath & "\Microsoft Office\Microsoft Outlook 2010.lnk") Then
Set oFolder = oShell.Namespace(sAllUsersProgramsPath & "\Microsoft Office")
Set oFolderItem = oFolder.ParseName("Microsoft Outlook 2010.lnk")
Set colVerbs = oFolderItem.Verbs
For Each oVerb in colVerbs
If Replace(oVerb.name, "&", "") = "Pin to Taskbar" Then oVerb.DoIt
Next
End If
'Windows Media Player
If oFSO.FileExists(sAllUsersProgramsPath & "\Windows Media Player.lnk") Then
Set oFolder = oShell.Namespace(sAllUsersProgramsPath)
Set oFolderItem = oFolder.ParseName("Windows Media Player.lnk")
Set colVerbs = oFolderItem.Verbs
For Each oVerb in colVerbs
If Replace(oVerb.name, "&", "") = "Pin to Taskbar" Then oVerb.DoIt
Next
End If
'Delete the script
DeleteSelf
Sub DeleteSelf()
Dim oFSO
Set oFSO = CreateObject("Scripting.FileSystemObject")
'Delete the currently executing script
oFSO.DeleteFile WScript.ScriptFullName
Set oFSO = Nothing
End Sub
Function OSVersion
Dim sComputer,oWMIService,colOperatingSystems,oOperatingSystem
sComputer = "."
Set oWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & sComputer & "\root\cimv2")
Set colOperatingSystems = oWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each oOperatingSystem in colOperatingSystems
'Wscript.Echo oOperatingSystem.Caption & " " & oOperatingSystem.Version
OSVersion = oOperatingSystem.Caption & " " & oOperatingSystem.Version
Next
End Function
Function WriteToLog(s,sPathLogFile)
'log file
Dim fso,tLog
Dim sFolderPath
Set fso = CreateObject("Scripting.FileSystemObject")
sFolderPath = Left(sPathLogFile,InstrRev(sPathLogFile,"\",-1,1)-1)
If Not fso.FolderExists(sFolderPath) Then fso.CreateFolder(sFolderPath)
Set tLog = fso.OpenTextFile(sPathLogFile, 8, True) 'open for append = 8 ,True = file is created
tLog.WriteLine(s)
tLog.Close
End Function
Function Create_ShortCut(ByVal TargetPath, Arguments, _
ByVal ShortCutPath, ByVal sShortCutName, WorkPath, Window_Style, sIconFilePath, _
IconNum)
'http://www.vbforums.com/showthread.php?t=234891
'The Window_Style is a integer,
'Window_Style=3 means MaximizedWindows when run.
'Window_Style=7 means MinimizedWindows when run.
'Well, others means NormalWindows when run.
'Default is 0.
'The IconNum set our Shortcut's icon.
'0 means the first icon in the target file.
'1 the second ...
'2 the third ...
'and so on.
'Default is 0.
'Example: create shortcut in Start Menu to flip 3D:
'Create_ShortCut "C:\Windows\System32\rundll32.exe" , "DwmApi #105" ,_
' sCurrentUserStartFolderPath,"Flip 3D","",0,"%SystemRoot%\System32\imageres.dll",0
Dim oWshShell
Dim MyShortcut
Set oWshShell = CreateObject("WScript.Shell")
If Right(sShortCutName,4) <> ".lnk" Then sShortCutName = sShortCutName & ".lnk"
Set MyShortcut = oWshShell.CreateShortcut(ShortCutPath & "\" & sShortCutName)
MyShortcut.TargetPath = TargetPath
MyShortcut.WorkingDirectory = WorkPath
MyShortcut.WindowStyle = Window_Style
MyShortcut.IconLocation = sIconFilePath & "," & IconNum
' e.g. 'DwmApi #105' as in: "C:\Windows\System32\rundll32.exe DwmApi #105" for Flip 3D
MyShortcut.Arguments = Arguments
MyShortcut.Save
End Function
