Страница 2 из 6
Добавлено: Чт май 18, 2006 17:53
Batya
Меня тут
Zorroz попросил выложить скрипт для снятия иконки, т.е. снятия атрибута "Только чтение" у папки и удаления desktop.ini.
Мне не хотелось этого делать, т.к. считаю, что удаление desktop.ini не всегда "есть хорошо", но он меня уговорил
Код: Выделить всё
'========================================================
' Снятие иконки у папки в TC:
' снятие у папки атрибута "Только чтение"
' и удаление (по желанию) в папке файла Desktop.ini
' Параметры вызова из TC для текущей папки:
' "%P"
' или для папки под курсором:
' %P%N
' Для удаления Desktop.ini укажите любой второй параметр
' Пример: %P%N 1
'========================================================
Dim FSO, TargetDir, FileName
Set FSO = CreateObject("Scripting.FileSystemObject")
TargetDir = WScript.Arguments(0)
FileName = "Desktop.ini"
If FSO.FolderExists(TargetDir)Then
If Right(TargetDir, 1) <> "\" Then
TargetDir = TargetDir & "\"
End If
Else
MsgBox "Не задано имя папки!", vbOKOnly + vbExclamation, "Снятие иконки"
WScript.Quit
End If
' Снимем у папки атрибут "Только чтение"
Attr = 1
Set oDir = FSO.GetFolder(TargetDir)
oDir.Attributes = oDir.Attributes and not Attr
'Удалим Desktop.ini
If FSO.FileExists(TargetDir & FileName) and (WScript.Arguments.Count > 1) Then
FSO.DeleteFile(TargetDir & FileName)
End If
Set FSO = Nothing
WScript.Quit
Добавлено: Ср июн 28, 2006 03:42
KoS
огромное спасибо за скрипты, Batya.
Раньше я все в ручную через дибильный експлореровский диалог устанавливал. Даже в голову не приходило написать скрипт. А теперь стало просто супер. Спасибо.
Добавлено: Чт июл 13, 2006 17:02
Hazy
А вот подскажите, неужели нельзя было просто нажать правой кнопкой мышки на нужной папке, выбрать "Свойства", выбрать "Настройка" и нажать кнопку "Сменить значек..."?
потом выбираем значек, или библиотеку значков, и наслождаемся.
Да и смена атрибутов, если не ошибаюсь, неважна.
Единственное, что из личного опыта заметил, если иконка валяется в той же папке, которой внешний вид - меняет, то файл Desktop.ini стоит довести до такого состояния:
[.ShellClassInfo]
IconFile=TOTALCMD.ico
IconIndex=0
тогда при копировании каталога в другое место, меньше проблем будет
Добавлено: Чт июл 13, 2006 17:42
Batya
Hazy
Здесь обсуждалась идея, чтобы нажатием одной кнопки сделать иконку у папки в TC. Чтобы TC отображал такую же иконку, как Explorer, надо у папки установить атрибут "Только чтение".
Добавлено: Чт июл 13, 2006 17:59
Hazy
Вот только что проверил, снял атрибут, изменил иконку, в ТС все сразу обновилось...
Мож я чет непонял...

Добавлено: Чт июл 13, 2006 19:17
Batya
Для папки вызови команду TC "Файлы\Изменить атрибуты". В диалоговом окне сними все флажки -> ОК.
Теперь отображается иконка?
Добавлено: Пт июл 14, 2006 09:33
Hazy
нет
оригинально....
наверное форточки принудительно сей атрибут ставят, когда меняешь значек
просто я так никогда не делал

а вот менять иконки на папках, очень люблю

и поэтому у меня всегда иконки в ТС 32х32 установлены
Да, еще недавно для себя приятную утилитку нарыл, которая меняет цвет папок. Оченно в работе помогает.
Добавлено: Пт июл 14, 2006 09:37
Lamer
Hazy писал(а):Да, еще недавно для себя приятную утилитку нарыл, которая меняет цвет папок. Оченно в работе помогает.
А можно попросить чуть-чуть поподробнее? Всех папок? Или по какому принципу? Как называется утилита? Free?
Добавлено: Пт июл 14, 2006 15:09
Hazy
Прога посностью FREE
Собственно прог даже две
Folderico 3.2.1
Живет
тута и говорит на русском
вторая
iColorFolder
Живет
тута
Я пользуюсь второй (первую так и не попробовал), принцип работы просто: у проги есть наборчики изображений с разними цветами папок и она прописывает ссылку на иконку в этом наборе в Desktop.ini, т.е. в памяти она не сидит, что - приятно.
Минус в том, что если папка уже имеет уникальную иконку, то она е потеряет.
С обоими вкусностями и еще всякими украшательствами познакомился
тута, так что смотрите, украшайте унылые форточки.
ну вот, офффффтопик вышел
сорьки

но тема то любопытная

Добавлено: Пт июл 14, 2006 15:28
Lamer
Угу. Спасибо,Hazy
Добавлено: Пн июл 17, 2006 09:28
Hazy
Да незачто

Добавлено: Вс май 06, 2007 22:27
DrShark
У меня есть такой Desktop.ini:
Код: Выделить всё
[.ShellClassInfo]
IconFile=%ProgramFiles%\Arsenal Company\Сократ Персональный 4.1\spv.exe
IconIndex=0
[.ShellClassInfo.A]
IconFile=%ProgramFiles%\Arsenal Company\Сократ Персональный 4.1\spv.exe
[.ShellClassInfo.W]
IconFile=+ACU-ProgramFiles+ACUAXA-Arsenal Company+AFwEIQQ+BDoEQAQwBEI- +BB8ENQRABEEEPgQ9BDAEOwRMBD0ESwQ5- 4.1+AFw-spv.exe
Насколько я понимаю, так он выглядит максимально корректно. Можно ли с помощью VBScript создавать из кириллицы белиберду наподобие той, что в [.ShellClassInfo.W]? Было бы неполхо добавить это в скрипт, приведенный выше.
Добавлено: Ср авг 01, 2007 23:54
Bakli
микроангел создает отличные файлы.. вообще или иконку в папке храните или на ехе в папке ссмылайтесь.. просто если поменять средствами винды, то на другом компе иконки не будет, а так она сохраняется.
всего нужны тока две строчки
[.ShellClassInfo]
IconFile=GTA3.exe
IconIndex=0
можно еще например
OriginalInfoTip=это всплывающая подсказка

)
Добавлено: Чт апр 16, 2009 18:59
Batya
Вариант скрипта с автоматическим\полуавтоматическим поиском файла иконок:
Код: Выделить всё
'=========================================================================
' Задание иконок у папок (создание файлов desktop.ini)
' Параметры:
' {папка|файл-список папок} [{файл с иконкой} [{режим поиска файла с иконкой}]]
' где режим поиска файла с иконкой может принимать значения:
' 0 - обязательно должен быть задан файл с иконкой;
' 1 - если не задан файл с иконкой, выполняется автоматический поиск;
' 2 - если автоматически файл не найден, прелагается указать его вручную;
' 3 - всегда предлагается указать файл вручную (по умолчанию).
'
' Примеры параметров вызова из TC:
' "%P" "%N"
' %P%N %T%M
' %L "" 2
'
' Автор - Batya
'=========================================================================
Option Explicit
'======== Изменяемые параметры ===========================================
Const FileName = "Desktop.ini"
Const DefaultMode = 3 'Режим поиска файла с иконкой по умолчанию
Const FoldAttr = 1 'Атрибуты папки - "Только чтение"
Const FileAttr = 38 'Атрибуты файла - "Скрытый", "Системный", "Архивный"
'=========================================================================
Dim Mess, FSO, WSH, ListFlag, FF, IconFile, F, Errors, Mode
SetMess
Set Errors = CreateObject("Scripting.Dictionary")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WSH = CreateObject("WScript.Shell")
CheckParam
If ListFlag Then
For Each F In Split(FSO.OpenTextFile(FF).ReadAll, vbNewLine)
If F <> "" Then Main F
Next
Else
Main FF
End If
If Errors.Count > 0 Then
MessBox JoinErr(Errors), 2
'Else
' MessBox Mess(7), 3
End If
Quit
Sub SetMess
Set Mess = CreateObject("Scripting.Dictionary")
With Mess
.Add 0, "Задание иконки для папки"
.Add 1, "Не указаны параметры!"
.Add 2, "Первый параметр не является папкой или файлом-списком!"
.Add 3, "Указанный файл с иконкой не существует!"
.Add 4, "Не является папкой!"
.Add 5, "Файл с иконкой не определен!"
.Add 6, "Файл " & FileName & " уже существует!"
.Add 7, "Операция завершена."
.Add 8, "Операция завершена с ошибками." & vbNewLine
.Add 9, "Укажите файл иконок для папки "
.Add 10, "Исполняемые файлы (*.exe)|*.exe|Файлы иконок (*.ico)|*.ico|Все файлы (*.*)|*.*"
.Add 11, "Неправильно указан режим поиска файла иконок!"
.Add 12, "В данном режиме файл с иконкой должен быть указан обязательно!"
End With
End Sub
Sub Main(pF)
Dim lF, lIF
lF = GetPath(pF)
If Not FSO.FolderExists(lF) Then
Errors.Add lF, lF & " - " & Mess(4)
Exit Sub
End If
lIF = GetIconFile(lF, IconFile)
If lIF = "" Then
Errors.Add lF, lF & " - " & Mess(5)
Exit Sub
End If
'Установим атрибуты папки
SetFoldAttr lF
'Создадим Desktop.ini
If Not FSO.FileExists(lF & "\" & FileName) Then
CreateDesktopFile lF & "\" & FileName, lIF
Else
Errors.Add lF, lF & " - " & Mess(6)
Exit Sub
End If
End Sub
Sub CheckParam
If WScript.Arguments.Count = 0 Then
MessBox Mess(1), 1
Quit
End If
FF = WScript.Arguments(0)
ListFlag = FSO.FileExists(FF)
If (Not ListFlag) And (Not FSO.FolderExists(FF)) Then
MessBox Mess(2), 1
Quit
End If
If WScript.Arguments.Count > 1 Then
IconFile = WScript.Arguments(1)
If IconFile <> "" Then IconFile = GetPath(IconFile)
Else
IconFile = ""
End If
If WScript.Arguments.Count > 2 Then
Mode = WScript.Arguments(2)
If Mode = "" Then
Mode = DefaultMode
Else
If IsNumeric(Mode) Then
Mode = CInt(Mode)
Else
MessBox Mess(11), 1
Quit
End If
If Not((Mode = 0) Or (Mode = 1) Or (Mode = 2) Or (Mode = 3)) Then
MessBox Mess(11), 1
Quit
End If
End If
Else
Mode = DefaultMode
End If
If (Mode = 0) And (IconFile = "") Then
MessBox Mess(12), 1
Quit
End If
If (IconFile <> "") And (Not FSO.FileExists(IconFile)) Then
MessBox Mess(3), 1
Quit
End If
End Sub
Sub Quit
Set Errors = Nothing
Set WSH = Nothing
Set FSO = Nothing
WScript.Quit
End Sub
Function MessBox(pMess, pMode)
Dim lIcon
Select Case pMode
Case 1 lIcon = vbCritical + vbOKOnly
Case 2 lIcon = vbExclamation + vbOKOnly
Case 3 lIcon = vbInformation + vbOKOnly
End Select
MessBox = MsgBox(pMess, lIcon, Mess(0))
End Function
Function JoinErr(pDic)
Dim lKey
For Each lKey In pDic
JoinErr = JoinErr & vbNewLine & vbNewLine & pDic(lKey)
Next
JoinErr = Mess(8) & JoinErr
End Function
Sub CreateDesktopFile(pFile, pIconFile)
Dim oFile
Set oFile = FSO.CreateTextFile(pFile)
With oFile
.WriteLine "[.ShellClassInfo]"
.WriteLine "IconFile=" & pIconFile
.WriteLine "IconIndex=0"
.Close
End With
Set oFile = FSO.GetFile(pFile)
oFile.Attributes = oFile.Attributes or FileAttr
Set oFile = Nothing
End Sub
Sub SetFoldAttr(pFolder)
Dim oDir
Set oDir = FSO.GetFolder(pFolder)
oDir.Attributes = oDir.Attributes or FoldAttr
Set oDir = Nothing
End Sub
Function GetPath(pPath)
GetPath = FSO.GetAbsolutePathName(WSH.ExpandEnvironmentStrings(pPath))
End Function
Function GetIconFile(pFolder, pFile)
Dim lFile
If Mode = 0 Then
GetIconFile = pFile
Exit Function
End If
If Mode < 3 Then
If pFile <> "" Then
GetIconFile = pFile
Exit Function
Else
lFile = pFolder & "\" & FSO.GetBaseName(pFolder) & ".exe"
If FSO.FileExists(lFile) Then
GetIconFile = lFile
Exit Function
End If
For Each lFile In FSO.GetFolder(pFolder).Files
If UCase(FSO.GetExtensionName(lFile)) = "EXE" Then
If (UCase(Left(lFile, 5)) <> "UNINS") Or _
(UCase(FSO.GetBaseName(lFile)) <> "UNWISE") Then
GetIconFile = lFile
Exit Function
End If
End If
Next
If Mode = 2 Then
GetIconFile = OpenFile(pFolder)
Else
GetIconFile = ""
End If
End If
Else
GetIconFile = OpenFile(pFolder)
End If
End Function
Function OpenFile(pFolder)
Dim Dlg
On Error Resume Next
Set Dlg = CreateObject("MSComDlg.CommonDialog")
If Err.Number = 0 Then
On Error GoTo 0
With Dlg
.InitDir = pFolder
.Filter = Mess(10)
.Flags = &H4 + &H8 + &H400 + &H1000 + &H80000
.FilterIndex = 1
.MaxFileSize = 32000
.CancelError = True
.DialogTitle = Mess(9) & """" & pFolder & """"
On Error Resume Next
.ShowOpen
End With
If Err.Number = 0 Then
OpenFile = Dlg.FileName
Else
OpenFile = ""
End If
On Error GoTo 0
Set Dlg = Nothing
Else
On Error GoTo 0
Dlg = InputBox(Mess(9) & """" & pFolder & """", Mess(0), pFolder & "\")
If Dlg <> "" Then Dlg = GetPath(Dlg)
If Not FSO.FileExists(Dlg) Then Dlg = ""
OpenFile = Dlg
End If
End Function
Может работать для нескольких выделенных папок.
Если будут проблемы с лицензией на объект MSComDlg, нужно поправить реестр вот этим reg-файлом:
Код: Выделить всё
REGEDIT4
[HKEY_CLASSES_ROOT\Licenses\4D553650-6ABE-11cf-8ADB-00AA00C00905]
@="gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj"
[HKEY_CLASSES_ROOT\Licenses\78E1BDD1-9941-11cf-9756-00AA00C00908]
@="yjrjvqkjlqqjnqkjvprqsjnjvkuknjpjtoun"
Если объект MSComDlg вообще не создается, нужно найти и зарегистрировать COMDLG32.OCX.
Добавлено: Сб дек 19, 2009 11:31
Andrey_A
В продолжении темы
Появилась проблема, помогите решить
1 Есть файл-список путей папок Пути.txt
2 Есть библиотека значков %WINDIR%\Wcmicons.dll
3 Есть файл-список соответствующих к папкам номеров иконок из этой библиотеки Номера.txt
Задача Задать каждой папке иконку,т.е. создать в каждой папке файл desktop.ini для XP и Vista
Конструкция файла такая:
Код: Выделить всё
[.ShellClassInfo]
IconFile=%WINDIR%\Wcmicons.dll
IconIndex=1457
IconResource=%WINDIR%\Wcmicons.dll,1457
Я пользуюсь в основном vbs скриптами, и если скрипт будет написан в vbs, то будет отлично