TC не понимает библиотеки Windows 7

Обсуждение Total Commander. Установка, использование, настройка, решение проблем, скрытые функции. Обсуждение новых версий.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Ответить
ales128
Сообщения: 6
Зарегистрирован: Пн июл 11, 2011 08:52

TC не понимает библиотеки Windows 7

Сообщение ales128 »

Когда я создаю библиотеку Win 7 (virtual folder), проводник ее отлично понимает, но вот TC пытается открыть ее как файл с неизвестным расширением
:(
Помогите, кто знает!
Аватара пользователя
Rodny
Сообщения: 949
Зарегистрирован: Ср янв 24, 2007 00:59
Откуда: Могилёв, Беларусь

Сообщение Rodny »

Как ты её открываешь? В библиотеки нужно входить через Рабочий стол, команда cm_OpenDesktop.
ales128
Сообщения: 6
Зарегистрирован: Пн июл 11, 2011 08:52

Сообщение ales128 »

Настроил значек с командой cm_OpenDesktop. На рабочем столе отображаются библиотеки и в них можно войти

Но моя цель создать библиотеку не в стандартном расположении библиотек - c:\Users\[My user]\AppData\Roaming\Microsoft\Windows\Libraries , а в произвольной директории и чтобы входить в нее можно было, как в проводнике - по Enter или DoubleClick
Аватара пользователя
Rodny
Сообщения: 949
Зарегистрирован: Ср янв 24, 2007 00:59
Откуда: Могилёв, Беларусь

Сообщение Rodny »

ales128
Я не понимаю, что значит "создать библиотеку не в стандартном расположении библиотек... а в произвольной директории". При добавлении папок в существующие библиотеки, при создании новых библиотек все они доступны через рабочий стол.
Рассказывай по шагам, что делать.
ales128
Сообщения: 6
Зарегистрирован: Пн июл 11, 2011 08:52

Сообщение ales128 »

Есть разные варианты, вплоть до того что вручную написать XML содержимое файла library-ms. Вот один из вариантов:

Добавить библиотеку в существующие, затем взять ее и скопировать или переместить из c:\Users\[My user]\AppData\Roaming\Microsoft\Windows\Libraries\[My library].library-ms
в необходимое место. После этого она распознается проводником как любая другая библиотека

Добавлено спустя 36 минут:

Вот еще как создавать библиотеки:
http://winreview.ru/Sekreti-Windows/808 ... yu-Sozdat-
Смотрим "Пример №2. Создаем библиотеки в любом месте файловой системы"
Аватара пользователя
Rodny
Сообщения: 949
Зарегистрирован: Ср янв 24, 2007 00:59
Откуда: Могилёв, Беларусь

Сообщение Rodny »

ales128
Ясно. Не знаю, как устроен механизм виртуальных папок TC, но сомневаюсь, что он обращается с библиотеками напрямую. Думаю, что Гислер просто не предусмотрел возможности работать с этими файлами непосредственно.
Подожди, возможно местные плагинописатели посодействуют. Или сразу иди на оф. форум с запросом.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Rodny писал(а):возможно местные плагинописатели посодействуют
Случаем, уже не посодействовали?
Аватара пользователя
Rodny
Сообщения: 949
Зарегистрирован: Ср янв 24, 2007 00:59
Откуда: Могилёв, Беларусь

Сообщение Rodny »

Flasher
А где ты у него видел работу с библиотеками? :shock: Это логичнее сюда адресовать.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Rodny
Проверил. Не реализовано. Насчёт адресации не согласен. Файлы library-ms нужно бы открывать как папки, плагин сразу открывает их в проводнике.
ales128
Сообщения: 6
Зарегистрирован: Пн июл 11, 2011 08:52

Сообщение ales128 »

Сделал такое решение:

Задаю внутреннюю ассоциацию TC
*.library-ms -- d:\Library-ms.vbs


Содержимое файла d:\Library-ms.vbs:

Код: Выделить всё

dim objArgs 
dim arg1


Const ForReading = 1
Dim fso, f
dim pos1,pos2
dim dir

'===============
sub main

Set objArgs = WScript.Arguments  ' Создаем объект WshArguments
For Each Arg In objArgs
  s=s & Arg & " "  ' Формируем строки со значениями аргументов
  arg1=Arg
Next

if s="" then
	msgbox("Ошибка аргумента")
	exit sub	
	end if

on error resume next
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(s, ForReading)
TextFile = f.ReadAll
if err.number <> 0 then
	msgbox("Ошибка чтения файла")
	exit sub	
	end if
on error goto 0


pos1=instr(TextFile,"<url>")+len("<url>")
pos2=instr(TextFile,"</url>")

if pos2 >= pos1 then
	dir=mid(TextFile,pos1,pos2-pos1)
	Set WSHShell = CreateObject("WScript.Shell")

	WSHShell.Run """C:\Program Files (x86)\totalcmd\TOTALCMD.EXE"" " & dir
	rem msgbox(dir)
	else
	msgbox("Ошибка в файле библиотеки:" + TextFile)
	exit sub
	end if

end sub

'===============

Call Main
По нажатию Enter на файле библиотеки открывается новый TC с нужной директорией

Код сырой, набросал лишь бы работало
Но идея стоящая :) (себя не похвалишь - никто не похвалит)
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

ales128
Это не откроет стандартные библиотеки с GUID. Пробовал с соответствующими разделами в HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\ и TCShellTC - результат тот же.
ales128 писал(а):открывается новый TC
Зачем новый?

Код: Выделить всё

Set WSHShell = CreateObject("WScript.Shell")

WSHShell.Run """C:\Program Files (x86)\totalcmd\TOTALCMD.EXE"" " & dir
поменять на

Код: Выделить всё

CreateObject("WScript.Shell").Exec("%COMMANDER_PATH%\Totalcmd.exe /O /S /L=""" & dir & """")
ales128
Сообщения: 6
Зарегистрирован: Пн июл 11, 2011 08:52

Сообщение ales128 »

Зачем новый?
Писал второпях... лишь бы заработало
Спасибо за правки и улучшения :)
Это не откроет стандартные библиотеки
Так их TC прекрасно открывает через Рабочий стол
или можно через путь: c:\Users\[My user]\AppData\Roaming\Microsoft\Windows\Libraries\[My library].library-ms
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

ales128 писал(а):или можно через путь
Так о нём то и шла речь. Не откроет.

Лично мне от скрипта хватило:

Код: Выделить всё

' Открыть файл library-ms
' Во внутренних ассоциациях TC назначить скрипт с аргументом "%1" на *.library-ms
'===========================================================
F = CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0), 1).ReadAll
pos1 = InStr(F,"<url>")+len("<url>")
pos2 = InStr(F,"</url>")
if pos2 >= pos1 Then Dir = mid(F,pos1,pos2-pos1)
CreateObject("WScript.Shell").Exec"%COMMANDER_PATH%\Totalcmd.exe /O /S /L=""" & Dir & """"
Последний раз редактировалось Flasher Пн июл 18, 2011 03:05, всего редактировалось 1 раз.
ales128
Сообщения: 6
Зарегистрирован: Пн июл 11, 2011 08:52

Сообщение ales128 »

В этом случае нужно лезть в реестр и выковыривать оттуда правильный путь, на который указывает библиотека

Еще проблема в том, что в теге <URL> путь к папкам для глаз человека и он не гарантированно совпадет с путем в теге <serialized>, в котором закодирован "истинный" путь

Самое правильное - через IShellLibrary API, но это уже не через VBScript
Ответить