; ; Program Version: 1.2 ; Language: English ; Author: belkira ; ; Script Function: ; Script to create shortcuts on Desktop for exe files on a removable drive ; and then to remove those shortcuts when the removable drive has been removed. ;Script Usage: ; Launch script on whatever computer(s) you want to have the shortcuts updated on. ; When a new removable drive is inserted, this script will scan for all exe files on the ; removable device, and create shortcuts for them on the users Desktop. ; ; Once removed the script will cleanup any shortcuts that were created. ; #NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. SendMode Input ; Recommended for new scripts due to its superior speed and reliability. ;SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. #Persistent First = 0 DriveGET, USB, List, REMOVABLE settimer, check, 500 return check: ret := scan4newDrives(USB) If (First = 0) { ; Copy current shortcuts Loop, %A_Desktop%\*.lnk { FileGetShortcut, %A_LoopFileName%, Target ShortCutTarget = %ShortCutTarget%%Target%\\%A_LoopFileName%`n ;ShortCutName = %ShortCutName%%A_LoopFileName%`n ;MsgBox %ShortCutTarget%`n%ShortCutName% } } First = 1 if (!ret) { UsbDirList := ShortcutList := ;nothing here } else { ; Scan usb drive for applications Usb_Folders = %ret%:\ Loop, %Usb_folders%*.exe, 0, 1 { StringReplace, dummy, A_LoopFileFullPath, \, \, UseErrorLevel If (ErrorLevel > 2) ; ex: "C:\folder1\folder2\folder3\file.ext" continue ; skip files that are 1 or more folders deep UsbDirList = %UsbDirList%%A_LoopFileFullPath%`n } { } Sort UsbDirList, UD`n ;Remove duplicate entries, just in case ; create shortcuts Loop, Parse, UsbDirList, `n { If !A_LoopField Break SplitPath, A_LoopField, Name, Dir, Extension, NameNoExt, OutDrive FileCreateShortcut, %Dir%\%Name%, %A_Desktop%\%NameNoExt%.lnk CreatedShortcuts = %CreatedShortcuts%%A_Desktop%\%NameNoExt%.lnk`n } } ; remove shortcuts if drive removed IfNotExist %OutDrive% If CreatedShortcuts >= 1 { Loop, Parse, CreatedShortcuts, `n { FileDelete, %A_LoopField% CreatedShortcuts = } Loop, Parse, ShortCutTarget, `n { If A_LoopField = Continue SplitPath, A_LoopField, Name, Old_Target StringTrimRight, Target, Old_Target, 1 FileCreateShortcut, %Target%, %A_Desktop%\%Name% ;MsgBox Name=%Name%`nTarget=%Target% } } return scan4newDrives(byref olddrives) { DriveGET, NewUSB, List, REMOVABLE Loop, parse, NewUSB { if InStr(olddrives, a_loopfield) { ;still here } else { ;found new device! olddrives := NewUSB ;update return, % a_loopfield } } olddrives := NewUSB ;update return, 0 ;no new devices found. }