Страница 1 из 1

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

Добавлено: Пн июл 11, 2011 08:56
ales128
Когда я создаю библиотеку Win 7 (virtual folder), проводник ее отлично понимает, но вот TC пытается открыть ее как файл с неизвестным расширением
:(
Помогите, кто знает!

Добавлено: Вт июл 12, 2011 10:38
Rodny
Как ты её открываешь? В библиотеки нужно входить через Рабочий стол, команда cm_OpenDesktop.

Добавлено: Вт июл 12, 2011 13:24
ales128
Настроил значек с командой cm_OpenDesktop. На рабочем столе отображаются библиотеки и в них можно войти

Но моя цель создать библиотеку не в стандартном расположении библиотек - c:\Users\[My user]\AppData\Roaming\Microsoft\Windows\Libraries , а в произвольной директории и чтобы входить в нее можно было, как в проводнике - по Enter или DoubleClick

Добавлено: Вт июл 12, 2011 13:48
Rodny
ales128
Я не понимаю, что значит "создать библиотеку не в стандартном расположении библиотек... а в произвольной директории". При добавлении папок в существующие библиотеки, при создании новых библиотек все они доступны через рабочий стол.
Рассказывай по шагам, что делать.

Добавлено: Вт июл 12, 2011 15:00
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. Создаем библиотеки в любом месте файловой системы"

Добавлено: Вт июл 12, 2011 17:45
Rodny
ales128
Ясно. Не знаю, как устроен механизм виртуальных папок TC, но сомневаюсь, что он обращается с библиотеками напрямую. Думаю, что Гислер просто не предусмотрел возможности работать с этими файлами непосредственно.
Подожди, возможно местные плагинописатели посодействуют. Или сразу иди на оф. форум с запросом.

Добавлено: Вт июл 12, 2011 17:49
Flasher
Rodny писал(а):возможно местные плагинописатели посодействуют
Случаем, уже не посодействовали?

Добавлено: Вт июл 12, 2011 17:59
Rodny
Flasher
А где ты у него видел работу с библиотеками? :shock: Это логичнее сюда адресовать.

Добавлено: Вт июл 12, 2011 18:32
Flasher
Rodny
Проверил. Не реализовано. Насчёт адресации не согласен. Файлы library-ms нужно бы открывать как папки, плагин сразу открывает их в проводнике.

Добавлено: Вт июл 12, 2011 20:03
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 с нужной директорией

Код сырой, набросал лишь бы работало
Но идея стоящая :) (себя не похвалишь - никто не похвалит)

Добавлено: Вт июл 12, 2011 21:46
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 & """")

Добавлено: Вт июл 12, 2011 22:02
ales128
Зачем новый?
Писал второпях... лишь бы заработало
Спасибо за правки и улучшения :)
Это не откроет стандартные библиотеки
Так их TC прекрасно открывает через Рабочий стол
или можно через путь: c:\Users\[My user]\AppData\Roaming\Microsoft\Windows\Libraries\[My library].library-ms

Добавлено: Вт июл 12, 2011 22:08
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 & """"

Добавлено: Вт июл 12, 2011 22:35
ales128
В этом случае нужно лезть в реестр и выковыривать оттуда правильный путь, на который указывает библиотека

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

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