pcwMultilink.V2.VBS

Posted 01/27/2009 - 16:44 by admin

' pcwMultilink.V2 dient zum bequemen Einrichten multifunktionaler Desktop-Icons.
' Sie erstellen einfach normale Links im automatisch geöffneten Ordner Links.TMP.
' Auf Basis dieser Information erstellt das Script ein einzelnes Icon, das im 
' Kontextmenü alle gewünschten Einträge erhält.
' Die Links unter Links.TMP und der Ordner selbst werden automatisch wieder gelöscht.
'
' Das Script benötigt keine Installation, kann in jedem Ordner liegen und beliebig
' verschoben oder umbenannt werden.
' Aufruf einfach per Doppelklick.
' Um einen Multilink zu löschen, verwenden Sie Drag & Drop auf das Script.
 
dim menuname(50)
dim programm(50)
dim ziel(50)
dim Parameter(50)
dim myDesktop
Set myfiles = CreateObject("Scripting.FileSystemObject")
Set myshell = CreateObject("Wscript.Shell")
Set myEnv = myShell.Environment("PROCESS")
set myArgs=wscript.arguments
mydesktop=myShell.SpecialFolders("Desktop")
tempfolder=myEnv("TEMP") & "\Links.TMP"
 
'Drag & Drop (Löschen eines Multilinks) ?
if myArgs.Count > 0 then 
        DeleteLink myArgs(0)
        wscript.quit
end if
 
on error resume next
MyFiles.CreateFolder(tempfolder)
myShell.run "explorer.exe /n," & tempfolder,1,true
wscript.sleep 1000
msgbox "Gewünschte Links bitte im geöffneten Ordner 'Links.tmp' anlegen." _
        & chr(13) & chr(13) & "Eventuell Link-Namen anpassen." _
        & chr(13) & chr(13) & "Dateiendungen wie '.EXE' werden gegebenenfalls automatisch entfernt." _
        & chr(13) & "Präfix 'Verknüpfung mit' ('Shortcut to') wird ebenfalls getilgt." _
        & chr(13) & "Ansonsten (Gross/Kleinschreibung etc.) erscheinen die Menüeinträge " _
        & chr(13) & "des Multi-Icons später genau so wie die hier abgelegten Link-Namen." _
        & chr(13) & chr(13) & "Am Ende - nach dem Sammeln aller Links - hier weiter mit 'OK' ..." _
        & chr(13) & chr(13) & "[Die temporären Links unter 'Links.tmp' werden anschließend gelöscht.]",," Neuen Multilink erstellen"
 
set lnkfolder=MyFiles.Getfolder(tempfolder)
set linkfiles=lnkfolder.Files
for each link in linkfiles
        check=ucase(right(link.name,4))
        if check=".LNK" Or check=".PIF" then
                clink=clink+1
                menuname(clink)=link.name
                i=instr(menuname(clink),".")
                menuname(clink)=left(menuname(clink),i-1)
                menuname(clink)=replace(menuname(clink),"Verknüpfung mit ","")
                menuname(clink)=replace(menuname(clink),"Shortcut to ","")
 
                set multilink=MyShell.CreateShortcut(link.path)
                Ziel(clink)=multilink.Targetpath
                Ziel(clink)=replace(Ziel(clink),chr(34),"")
                Parameter(clink)=multilink.Arguments
                if myFiles.FolderExists(Ziel(clink)) then
                        ziel(clink)="explorer.exe /n," & chr(34) & ziel(clink) & chr(34)
                        Programm(clink)="explorer.exe"
                else
                        temp=lcase(right(ziel(clink),4))
                        if temp=".exe" or temp=".com" or temp=".bat" then
                                Programm(clink)=Ziel(clink)
                                Ziel(clink)=chr(34) & Ziel(clink) & chr(34) & " " & parameter(clink)
                        else
                                ftype=myShell.regread("HKCR\" & temp & "\")
                                programm(clink)=myShell.regread("HKCR\" & ftype & "\shell\open\command\")
                                programm(clink)=replace(programm(clink),chr(34),"")
                                i=instr(lcase(programm(clink)),".exe")
                                if i=0 then i=instr(lcase(programm(clink)),".com")
                                if i=0 then i=instr(lcase(programm(clink)),".bat")
                                programm(clink)=left(programm(clink),i+3)
                                ziel(clink)=chr(34) & programm(clink) & chr(34) & " " & chr(34) & ziel(clink) & chr(34)
                        end if
                        ziel(clink)=replace(ziel(clink),"%SystemRoot%",myEnv("SYSTEMROOT"))
                        ziel(clink)=replace(ziel(clink),"%ProgramFiles%",myEnv("PROGRAMFILES"))
                        programm(clink)=replace(programm(clink),"%SystemRoot%",myEnv("SYSTEMROOT"))
                        programm(clink)=replace(programm(clink),"%ProgramFiles%",myEnv("PROGRAMFILES"))
                end if        
        Ziel(clink)=inputbox("Bitte prüfen Sie den Link..."," Multilink erstellen",Ziel(clink))
        end if
next
 
if clink=0 then
        msgbox "Keine Links unter " & tempfolder & " gefunden.",," Multilink"
        myFiles.DeleteFolder tempfolder,True
        wscript.quit
end if
 
for temp=1 to clink
        allmenus=allmenus & "(" & temp & ") " & menuname(temp) & chr(13)
next
 
'Hauptjob auswählen
mainjob=inputbox(clink & " Links gefunden. Hauptlink auswählen:" & chr(13) & chr(13) & allmenus," Multilink erstellen")
for temp=1 to clink
        if mainjob = cstr(temp) then mainok=1
next
 
if mainok=0 then 
        msgbox "Es wurde kein Hauptlink ausgewählt.",,"Abbruch"
        myFiles.DeleteFolder tempfolder,True
        wscript.quit
end if
 
'Der Hauptjob ist Drag & Drop-fähig (sofern das gewählte Programm dies unterstützt)
if Parameter(mainjob)="" then
        MainCommand=ziel(mainjob) & " %*"
else
        MainCommand=ziel(mainjob) & " " & Parameter(mainjob) & " %*"
end if
 
'Registry abfragen, was schon da ist (mit '089')
do
        count=count + 1
        regkey="HKCR\.089" & count & "\" 
        err.clear
        tmp=myshell.regRead(regkey)
loop while err.number=0
 
Dateityp=".089" & count
datei=mydesktop & "\" & menuname(mainjob) & Dateityp
 
'Symbol einrichten
if programm(mainjob)="explorer.exe" then
        symbol="Shell32.dll,3"
else
msgbox programm(mainjob)
        if ucase(right(programm(mainjob),4))=".EXE" then 
                symbol=programm(mainjob) & ",0"
        else
                symbol="pifmgr.dll," & count                
        end if
end if
 
'künstlichen Dateityp in die Registry eintragen
myshell.regwrite("HKCR\" & Dateityp & "\"),""
myshell.regwrite("HKCR\" & Dateityp & "\NeverShowExt"),""
myshell.regwrite("HKCR\" & Dateityp & "\DefaultIcon\"),symbol
myshell.regwrite("HKCR\" & Dateityp & "\ScriptEngine\"),"VBScript"
myshell.regwrite("HKCR\" & Dateityp & "\Shell\"),""
myshell.regwrite("HKCR\" & Dateityp & "\Shell\Open\"),menuname(mainjob)
myshell.regwrite("HKCR\" & Dateityp & "\Shell\Open\Command\"),maincommand
myshell.regwrite("HKCR\" & Dateityp & "\ShellEx\"),""
myshell.regwrite("HKCR\" & Dateityp & "\ShellEx\DropHandler\"),"{60254CA5-953B-11CF-8C96-00AA00B8708C}"
myshell.regwrite("HKCR\" & Dateityp & "\Shell\{Notizen}\"),""
myshell.regwrite("HKCR\" & Dateityp & "\Shell\{Notizen}\Command\"),"notepad.exe " & datei
 
for temp=1 to clink
        if cstr(temp) <> cstr(mainjob) then 
                myshell.regwrite("HKCR\" & Dateityp & "\Shell\" & menuname(temp) & "\"),""
                myshell.regwrite("HKCR\" & Dateityp & "\Shell\" & menuname(temp) & "\Command\"),ziel(temp) & " " & parameter(temp)
        end if
next
 
'Datei am Desktop anlegen
set multilink=myFiles.CreateTextFile(datei)
multilink.writeline ".LOG   ---  NOTIZEN  ---  NOTIZEN  ---  NOTIZEN ---"
multilink.close
myFiles.DeleteFolder tempfolder,True
 
'------------------------------------------------------------------------------
Sub DeleteLink (ByVal Datei)
Erweiterung=myFiles.GetExtensionName(datei)
if left(erweiterung,3)<>"089" then
        msgbox "Das gedroppte Objekt ist kein Multilink...",," Multilink löschen"
        wscript.quit
end if
tmp=msgbox(datei & chr(13) & "entfernen und den Dateityp " & Erweiterung _
        & " aus der Registry löschen?",4," Multilink löschen")
if tmp=7 then wscript.quit
tmp=myFiles.DeleteFile(datei,TRUE)
Import=myDesktop & "\pcwtemp.reg"
set myImport=myFiles.CreateTextFile(Import)
myImport.writeline "REGEDIT4"
myImport.writeline ""
myImport.writeline "[-HKEY_CLASSES_ROOT\." & erweiterung & "]"
myImport.close
wscript.sleep 500
myShell.run "regedit.exe /s " & chr(34) & Import & chr(34),,TRUE
wscript.sleep 500
tmp=myFiles.DeleteFile(import,TRUE)
end sub