Создание BAR-файла на основе заданного набора ярлыков
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
Получилось примерно так - *.vbs:
Код: Выделить всё
'=======================================================================================
' Создание в каталоге TC панели, содержащей Главное меню (Start Menu)
' Для вызова из TC необходимо в качестве параметра передать число:
' 0 - скрипт отработает один раз
' > 0 - скрипт будет висеть в памяти и обновлять панель через данное число миллисекунд
' При вызове скрипта без параметра будет изменено значение ключа в реестре,
' что остановит работу скрипта, висящего в памяти
'=======================================================================================
Option Explicit
Dim MyKey, WSH, StartMenuFile, FolderIconFile
Set WSH = WScript.CreateObject("WScript.Shell")
'========== Изменяемые параметры =======================================================
MyKey = "HKCU\Software\BatyaSoft\RunningMyScript" 'Ключ в реестре
StartMenuFile = "startmenu.bar" 'Имя файла панели
FolderIconFile = "%COMMANDER_PATH%\TOTALCMD.EXE,1" 'Иконка для папок на панели
'=======================================================================================
If WScript.Arguments.Count = 0 Then
WSH.RegWrite MyKey, "False"
Set WSH = Nothing
WScript.Quit
End If
If IsNumeric(WScript.Arguments(0)) = True Then
If WScript.Arguments(0) = 0 Then
ScanningStartMenu
End If
If WScript.Arguments(0) > 0 Then
Dim MykeyValue
MykeyValue = True
WSH.RegWrite MyKey, MykeyValue
Do While MykeyValue
ScanningStartMenu
WScript.Sleep WScript.Arguments(0)
MykeyValue = WSH.RegRead(MyKey)
Loop
End If
End If
Set WSH = Nothing
WScript.Quit
Function ScanningStartMenu
Dim FSO, F, AUSM, CUSM, i, Menu, Buffer, Lnk
Const ForWriting = 2
Set FSO = CreateObject("Scripting.FileSystemObject")
Set AUSM = FSO.GetFolder(WSH.ExpandEnvironmentStrings("%ALLUSERSPROFILE%") & "\Start Menu\Programs")
Set CUSM = FSO.GetFolder(WSH.ExpandEnvironmentStrings("%USERPROFILE%") & "\Start Menu\Programs")
i = 0
Buffer = ""
For Each Menu in AUSM.SubFolders
i = i + 1
Buffer = Buffer & vbCrLf & "button" & i & "=" & FolderIconFile
Buffer = Buffer & vbCrLf & "cmd" & i & "=cd " & Menu.Path
Buffer = Buffer & vbCrLf & "menu" & i & "=" & Menu.Name
Next
For Each Menu in CUSM.SubFolders
i = i + 1
Buffer = Buffer & vbCrLf & "button" & i & "=" & FolderIconFile
Buffer = Buffer & vbCrLf & "cmd" & i & "=cd " & Menu.Path
Buffer = Buffer & vbCrLf & "menu" & i & "=" & Menu.Name
Next
For Each Menu in AUSM.Files
If LCase(FSO.GetExtensionName(Menu.Path)) = "lnk" Then
Set Lnk = WSH.CreateShortcut(Menu.Path)
i = i + 1
If Lnk.IconLocation <> ",0" Then
Buffer = Buffer & vbCrLf & "button" & i & "=" & Lnk.IconLocation
Else
Buffer = Buffer & vbCrLf & "button" & i & "=" & Lnk.TargetPath
End If
Buffer = Buffer & vbCrLf & "cmd" & i & "=" & Menu.Path
Buffer = Buffer & vbCrLf & "menu" & i & "=" & FSO.GetBaseName(Menu.Path)
If Lnk.WorkingDirectory <> "" Then
Buffer = Buffer & vbCrLf & "path" & i & "=" & Lnk.WorkingDirectory
End If
End If
Next
For Each Menu in CUSM.Files
If LCase(FSO.GetExtensionName(Menu.Path)) = "lnk" Then
Set Lnk = WSH.CreateShortcut(Menu.Path)
i = i + 1
If Lnk.IconLocation <> ",0" Then
Buffer = Buffer & vbCrLf & "button" & i & "=" & Lnk.IconLocation
Else
Buffer = Buffer & vbCrLf & "button" & i & "=" & Lnk.TargetPath
End If
Buffer = Buffer & vbCrLf & "cmd" & i & "=" & Menu.Path
Buffer = Buffer & vbCrLf & "menu" & i & "=" & FSO.GetBaseName(Menu.Path)
If Lnk.WorkingDirectory <> "" Then
Buffer = Buffer & vbCrLf & "path" & i & "=" & Lnk.WorkingDirectory
End If
End If
Next
Buffer = "[Buttonbar]" & vbCrLf & "Buttoncount=" & i & Buffer
Set F = FSO.OpenTextFile(WSH.ExpandEnvironmentStrings("%COMMANDER_PATH%") & "\" & StartMenuFile, ForWriting, True)
F.Write Buffer
F.Close
Set Menu = Nothing
Set F = Nothing
Set AUSM = Nothing
Set CUSM = Nothing
Set FSO = Nothing
End FunctionИИИИХХХХХАААААААА!!!!!! Супер, ТО что нужно .. Спасибо тебе боооооооооооольшое Батя!!!! Вапще крсота...!!!8)
Скажи, а можно ли тоже самое провернуть только для определённой папки...
Скажем у меня есть папка E:\games\ - в этой папке ярлыки к играм.., ВОТ чтобы тоже генерился бар и всё содержимое этой папки, добавлял также в bar, но только чтобы значки были разные( свои для каждого ярлыка)?
Скажи, а можно ли тоже самое провернуть только для определённой папки...
Скажем у меня есть папка E:\games\ - в этой папке ярлыки к играм.., ВОТ чтобы тоже генерился бар и всё содержимое этой папки, добавлял также в bar, но только чтобы значки были разные( свои для каждого ярлыка)?
Легко.
Только я, изменив для красоты исходный код, этот кусок не отлаживал. Пиши, если будет ругаться.
Код: Выделить всё
'=======================================================================================
' Создание в каталоге TC панели, содержащей ярлыки из указанной папки
' Для вызова из TC необходимо в качестве параметра передать число:
' 0 - скрипт отработает один раз
' > 0 - скрипт будет висеть в памяти и обновлять панель через данное число миллисекунд
' При вызове скрипта без параметра будет изменено значение ключа в реестре,
' что остановит работу скрипта, висящего в памяти
'=======================================================================================
Option Explicit
Dim MyKey, WSH, MyBarFile, MyLnkFolder
Set WSH = WScript.CreateObject("WScript.Shell")
'========== Изменяемые параметры =======================================================
MyKey = "HKCU\Software\BatyaSoft\RunningMyScript" 'Ключ в реестре
MyBarFile = "games.bar" 'Имя файла панели
MyLnkFolder = "E:\games" 'Папка с ярлыками
'=======================================================================================
If WScript.Arguments.Count = 0 Then
WSH.RegWrite MyKey, "False"
Set WSH = Nothing
WScript.Quit
End If
If IsNumeric(WScript.Arguments(0)) = True Then
If WScript.Arguments(0) = 0 Then
ScanningMyLnkFolder
End If
If WScript.Arguments(0) > 0 Then
Dim MykeyValue
MykeyValue = True
WSH.RegWrite MyKey, MykeyValue
Do While MykeyValue
ScanningMyLnkFolder
WScript.Sleep WScript.Arguments(0)
MykeyValue = WSH.RegRead(MyKey)
Loop
End If
End If
Set WSH = Nothing
WScript.Quit
Function ScanningMyLnkFolder
Dim FSO, F, Games, i, LnkFile, Buffer, Lnk
Const ForWriting = 2
Set FSO = CreateObject("Scripting.FileSystemObject")
i = 0
Buffer = ""
For Each LnkFile in FSO.GetFolder(MyLnkFolder).Files
If LCase(FSO.GetExtensionName(LnkFile.Path)) = "lnk" Then
Set Lnk = WSH.CreateShortcut(LnkFile.Path)
i = i + 1
If Lnk.IconLocation <> ",0" Then
Buffer = Buffer & vbCrLf & "button" & i & "=" & Lnk.IconLocation
Else
Buffer = Buffer & vbCrLf & "button" & i & "=" & Lnk.TargetPath
End If
Buffer = Buffer & vbCrLf & "cmd" & i & "=" & LnkFile.Path
Buffer = Buffer & vbCrLf & "menu" & i & "=" & FSO.GetBaseName(LnkFile.Path)
If Lnk.WorkingDirectory <> "" Then
Buffer = Buffer & vbCrLf & "path" & i & "=" & Lnk.WorkingDirectory
End If
End If
Next
Buffer = "[Buttonbar]" & vbCrLf & "Buttoncount=" & i & Buffer
Set F = FSO.OpenTextFile(WSH.ExpandEnvironmentStrings("%COMMANDER_PATH%") & "\" & MyBarFile, ForWriting, True)
F.Write Buffer
F.Close
Set Lnk = Nothing
Set LnkFile = Nothing
Set F = Nothing
Set FSO = Nothing
End Function
Последний раз редактировалось Batya Чт июл 06, 2006 14:55, всего редактировалось 1 раз.
Код: Выделить всё
'=======================================================================================
' Создание в каталоге TC панели, содержащей Главное меню (Start Menu)
' Для вызова из TC необходимо в качестве параметра передать число:
' 0 - скрипт отработает один раз
' > 0 - скрипт будет висеть в памяти и обновлять панель через данное число миллисекунд
' При вызове скрипта без параметра будет изменено значение ключа в реестре,
' что остановит работу скрипта, висящего в памяти
'=======================================================================================
Option Explicit
Dim MyKey, WSH, StartMenuFile, FolderIconFile
Set WSH = WScript.CreateObject("WScript.Shell")
'========== Изменяемые параметры =======================================================
MyKey = "HKCU\Software\BatyaSoft\RunningMyScript" 'Ключ в реестре
StartMenuFile = "startmenu.bar" 'Имя файла панели
FolderIconFile = "%COMMANDER_PATH%\TOTALCMD.EXE,1" 'Иконка для папок на панели
'=======================================================================================
If WScript.Arguments.Count = 0 Then
WSH.RegWrite MyKey, "False"
Set WSH = Nothing
WScript.Quit
End If
If IsNumeric(WScript.Arguments(0)) = True Then
Dim FSO, i, Menu, Buffer, Lnk
If WScript.Arguments(0) = 0 Then
ScanningStartMenu
End If
If WScript.Arguments(0) > 0 Then
Dim MykeyValue
MykeyValue = True
WSH.RegWrite MyKey, MykeyValue
Do While MykeyValue
ScanningStartMenu
WScript.Sleep WScript.Arguments(0)
MykeyValue = WSH.RegRead(MyKey)
Loop
End If
End If
Set WSH = Nothing
WScript.Quit
Function ScanningStartMenu
Dim F, AUSM, CUSM, AUMM, CUMM
Const ForWriting = 2
Set FSO = CreateObject("Scripting.FileSystemObject")
Set AUSM = FSO.GetFolder(WSH.ExpandEnvironmentStrings("%ALLUSERSPROFILE%") & "\Start Menu\Programs")
Set CUSM = FSO.GetFolder(WSH.ExpandEnvironmentStrings("%USERPROFILE%") & "\Start Menu\Programs")
Set AUMM = FSO.GetFolder(WSH.ExpandEnvironmentStrings("%ALLUSERSPROFILE%") & "\Start Menu")
Set CUMM = FSO.GetFolder(WSH.ExpandEnvironmentStrings("%USERPROFILE%") & "\Start Menu")
i = 0
Buffer = ""
For Each Menu in AUMM.Files
ProcessFile
Next
For Each Menu in CUMM.Files
ProcessFile
Next
For Each Menu in AUSM.SubFolders
ProcessFolder
Next
For Each Menu in CUSM.SubFolders
ProcessFolder
Next
For Each Menu in AUSM.Files
ProcessFile
Next
For Each Menu in CUSM.Files
ProcessFile
Next
Buffer = "[Buttonbar]" & vbCrLf & "Buttoncount=" & i & Buffer
Set F = FSO.OpenTextFile(WSH.ExpandEnvironmentStrings("%COMMANDER_PATH%") & "\" & StartMenuFile, ForWriting, True)
F.Write Buffer
F.Close
Set Menu = Nothing
Set F = Nothing
Set AUSM = Nothing
Set CUSM = Nothing
Set FSO = Nothing
End Function
Function ProcessFolder
i = i + 1
Buffer = Buffer & vbCrLf & "button" & i & "=" & FolderIconFile
Buffer = Buffer & vbCrLf & "cmd" & i & "=cd " & Menu.Path
Buffer = Buffer & vbCrLf & "menu" & i & "=" & Menu.Name
End Function
Function ProcessFile
If LCase(FSO.GetExtensionName(Menu.Path)) = "lnk" Then
Set Lnk = WSH.CreateShortcut(Menu.Path)
i = i + 1
If Lnk.IconLocation <> ",0" Then
Buffer = Buffer & vbCrLf & "button" & i & "=" & Lnk.IconLocation
Else
Buffer = Buffer & vbCrLf & "button" & i & "=" & Lnk.TargetPath
End If
Buffer = Buffer & vbCrLf & "cmd" & i & "=" & Menu.Path
Buffer = Buffer & vbCrLf & "menu" & i & "=" & FSO.GetBaseName(Menu.Path)
If Lnk.WorkingDirectory <> "" Then
Buffer = Buffer & vbCrLf & "path" & i & "=" & Lnk.WorkingDirectory
End If
End If
End Function