Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

TCShellCd- переход cd по значению из любого ключа реестра
Goto page 1, 2  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Total7zip



Joined: 27 Nov 2010
Posts: 287

Post (Separately) Posted: Tue Mar 22, 2011 17:50    Post subject: TCShellCd- переход cd по значению из любого ключа реестра Reply with quote

TCShellCd - утилита для TC, позволяющая открывать в активной панели
любую папку, путь к которой хранится в реестре Windows.

Идея взята из псевдопеременных окружения TC (Avada: Ссылка заменена более актуальной.)
Например "cd %$PERSONAL%" открывает папку пользователя Мои Документы.

Это здорово, но этих переменных мало, например я не нашел папки CD Burning, Шаблоны и др.
То есть Microsoft добавляет новые папки в реестр, но мы не можем этим пользоваться пока не обновится TC.

К тому же не только микрософт хранит пути в реестре, например:
Code:
HKEY_LOCAL_MACHINE\SOFTWARE\VST\VSTPluginsPath



Как использовать:
1) конечно запускать из под TC, например через меню Ctrl+D
2) указать в качестве параметра путь к нужному значению в реестре.
Например
Code:
TCShellCd.exe HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\NetHood

откроет папку NetHood пользователя в активной панели TC.

Поддерживаются любые ключи реестра.
Ветку реестра можно указывать в полном или сокращенном форматах:
HKCU или HKEY_CURRENT_USER
HKLM или HKEY_LOCAL_MACHINE
и т.п.

Если значение указывает на файл, то в TC будет открыта папка с этим файлом.
Если нужно считать (Default) значение - поставьте в конце \.
Например, перейдем в папку по ключу регистрации COM объекта
:
Code:
TCShellCd.exe HKCR\CLSID\{6ED70EDA-595D-4298-B417-250CCBA7FFDA}\LocalServer32\

эта команда откроет папку, в которой у вас зарегистрирован
Script Helper ActiveX for TС (TCWSHelp.exe)

Если папка не существует, то команда игнорируется и состояние панели TC не меняется.

интересные ключи от Microsoft, которым, кажется, нет соответствия в псевдопеременных окружения TC
Code:
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Administrative Tools
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\SendTo
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\CD Burning
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Cache
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Cookies
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Favorites
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\History
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Local Settings
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\NetHood
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\PrintHood
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Recent
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Templates
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\CommonMusic
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\CommonVideo
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Common Administrative Tools
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Common Programs
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Common Favorites
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Common Templates
загрузки (downloads) windows 7:
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\{374DE290-123F-4565-9164-39C4925E467B}


http://narod.yandex.ru/disk/10841586001/TCShellCD_0015.7z
_________________
Total7zip - архиваторный+content+lister плагин, 0.8.5.2


Last edited by Total7zip on Fri Apr 22, 2011 18:56; edited 2 times in total
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Apr 14, 2011 18:07    Post subject: Reply with quote

Total7zip wrote:
интересные ключи от Microsoft
Все ключи в этих кустах сопоставлены с системными папками и переменными среды, а значит в указанные там каталоги можно легко зайти по команде cd. Поэтому утилита для тамашних ключей ничего отличимого от стандартных возможностей в плане портабельного перехода не даст.
Вот HKCR\CLSID, возможно, поковырять стоит, вероятно, что-то полезное и найдётся. Если уже есть конкретные примеры кроме Хелпера, то неплохо было бы их огласить для общей пользы.
А вот научить утилиту запускать диалоги согласно GUID было бы действительно полезной задачей (естественно, всех возможных, а не только тех, что запускаются с shell на висте/7).

 !  Avada:
Вызванная первой частью этого поста дискуссия, которую далее затеяли Flasher и ApceH, превратилась, к сожалению, в затяжной флейм, отягощённый личными выпадами.
По совокупности множественного нарушения правил форума (не расписывая подробно, кто, что и когда нарушил), делаю замечание обоим спорщикам. Ряд постов удалён или отредактирован.
Back to top
View user's profile Send private message
ApceH



Joined: 08 Apr 2011
Posts: 316
Location: Димитровград

Post (Separately) Posted: Sat Apr 16, 2011 17:49    Post subject: Reply with quote

Ура! Спасибо! Very Happy Very Happy Exclamation
Мне нужно было переходить в папку "Загрузки"... И написал скрипт GoToPathFromRegistry.js (в kIT PPP вплоть до 11.4 есть).
Там костыль на костыле... Чтение из реестра-то легко, а вот вбить в ТС надпись "cd D:\Downolads", например, проблематично... Слал через SendKeys, но чтобы не влияла текущая раскладка приходилось использовать буфер обмена через библиотечку ClipboardHelper.dll, которую регистрировать надо заранее...
Короче, наконец-то будет нормальное решение!
Кстати, вот ключ с путём к папке "Загрузки":
Code:
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\{374DE290-123F-4565-9164-39C4925E467B}
Проверил, переходит!
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2586
Location: Большая деревня Москва

Post (Separately) Posted: Sat Apr 16, 2011 18:39    Post subject: Reply with quote

Думаю, будет полезно создать в рамках этой (или отдельной) темы аналог ветки "Кнопки ТС". То есть автор прежде всего и вдохновленные его идеей пользователи выкладывают полезные пути, найденный в дебрях реестра. Лично я пока в приведенных примерах не нашел для себя что-либо интересное. Все пути, по которым я часто перехожу, уже давно вбиты в HotDirList или в соответствующие кнопки на панелях. Но если появятся интересные решения, возможно, и я что-нибудь стоящее откопаю.
И еще. Правильно ли я понимаю, что всевозможные приложения тоже пишут свои пути в реестр и что утилита поможет ими воспользоваться? (это я к тому, что приложений разных туева хуча, и копать реестр в поисках конкретных путей - сизифов труд). Может ли утилита помочь в этом поиске?
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
ApceH



Joined: 08 Apr 2011
Posts: 316
Location: Димитровград

Post (Separately) Posted: Wed Apr 20, 2011 19:05    Post subject: Reply with quote

Total7zip
Я так понял, что прога сработает только если родитель — totalcmd? И только на него влияет?

Известно, что в XP нет "официальной" папки Загрузки... Но оставлять не на всех ОС работающую кнопку на панели не хорошо! Тем более что у многих пользователей XP имеется такая папка, куда они обычно загружают всё с инета... Итак, что я задумал...
Приведу свой обновлённый скрипт для захода в папку из реестра:
Code:
/********************************************************************/
// Имя: GoToPathFromRegistry.js
// Автор: Шаповалов Арсений aka ApceH Hypocrite
// Описание: Переход TC в папку, путь которой получается из рестра по указанному ключу.
//           Если ключ отсутствует (например, в устаревшей ОС), предлагается выбрать папку.
//           Скрипт внесёт недостающий ключ.
/********************************************************************/

//Создаем объект ws
ws=WScript.CreateObject("WScript.Shell");

args=WScript.Arguments;
if (args.Count() < 2) {
 ws.Popup("Скрипт предназначен для запуска с панели Total Commander!\n\nСкрипт ожидает 2 или 3 параметра:\n• название ключа реестра с полным путём,\n• название значения реестра\n• локализованное название папки\n\nВнимание!\n• Нужно заключать в кавычки параметры, содержащие пробелы.\n• Слеши в пути НЕ нужно дублировать (экранировать).\n• В конце пути слеша быть НЕ должно.",0,"Неправильное использование",16);
 WScript.Quit(1);
}
KeyPath=args(0);
ValueName=args(1);
FolderName=(args.Length>=3)?" \""+args(2)+"\"":", которая должна была открыться";

//Читаем значение из реестра
try{
 Value=ws.RegRead(KeyPath+"\\"+ValueName);
}
catch(e){
 //ключ не найден
 ShellApp=WScript.CreateObject("Shell.Application");
 FolderDlg=ShellApp.BrowseForFolder(0, "Требуемый ключ реестра не найден!\nУкажите папку"+FolderName+",\nчтобы добавить недостающий ключ.", 0x11);
 //
 if (FolderDlg) {
  Value=FolderDlg.Items().Item().Path;
  ws.RegWrite(KeyPath+"\\"+ValueName, Value);
 }
 else WScript.Quit(2);
}
//==============
//вместо этого костыля хотелось бы запустить TCShellCD.exe...
//но его родителем будет wscript, поэтому он не сработает(((
//Создаём объект буфера обмена
try{
 clip=new ActiveXObject("ClipboardHelper.Clipboard");
}
catch(e){
 ws.Popup("Необходимая библиотека ClipboardHelper.dll не зарегистрирована!\nДля регистрации выполните от имен Администратора скрипт SystemRegister.cmd,\n находящийся в папке !Staging в месте, куда установлен kIT PPP.",0,"Неправильное использование",16)
 WScript.Quit(3);
}
try{
 //Получаем текущее содержимое буфера
 temp=clip.GetClipboardText();
 //Заносим в буфер обмена команду
 clip.SetClipboardText("cd "+Value);
 //"Вводим" в TC
 ws.SendKeys("{RIGHT}");
 ws.SendKeys("^a");
 ws.SendKeys("^v");
 WScript.Sleep(100);
 ws.SendKeys("{ENTER}");
 //Надо подождать, потому что может вставить возвращенный старый текст!
 WScript.Sleep(1000);
 //Возвращаем текст как было
 clip.SetClipboardText(temp);
}
catch(e) {}
/************* Конец ************************************************/

Кнопка примерно такая:
Code:
TOTALCMD#BAR#DATA
wscript %COMMANDER_PATH%\ADDONS\GoToPathFromRegistry.js
"HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" {374DE290-123F-4565-9164-39C4925E467B}
ICONS\downloads.ico
Перейти в папку "Загрузки"
%COMMANDER_PATH%\ADDONS\
1
-1

То есть я хочу, чтобы если человек нажал кнопку под устаревшей ОС, его попросили самому выбрать папку, которую он использует для "загрузок"...
Указанная папка прописывается в реестр и далее человек как-будто сидит под современной ОС!

Всё бы хорошо, но вместо шаманства с буфером обмена и посылкой нажатий клавиш, я не смог использовать вашу прогу TCShellCD, потому что её родителем становится wscript (или даже просто система, если он успевает завершится)... Я не смог найти, как сменить родителя процесса в WSH, да и это будет не менее идиотский костыль...

Таким образом, очень надеюсь, что вы реализуете в самой проге такой функционал:
если такого ключа нет (но синтаксически всё в порядке),
запросить указать папку
и записать её путь в переданный ключ реестра,
а затем перейти в эту папку, обычным способом (а в дальнейшем ключ уже будет существовать).
Ну конечно, если нажал Отмена, то ключ не создаём и в папку не входим.
Back to top
View user's profile Send private message
Total7zip



Joined: 27 Nov 2010
Posts: 287

Post (Separately) Posted: Thu Apr 21, 2011 16:31    Post subject: Reply with quote

про предложение - надо подумать, возможно это интересно. =)

2Flasher
Ну нет переменных в системе для Administrative Tools, SendTo, CD Burning, Templates, CommonMusic
и т.п. зачем спорить-то?
_________________
Total7zip - архиваторный+content+lister плагин, 0.8.5.2
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Apr 21, 2011 16:55    Post subject: Reply with quote

Total7zip wrote:
про дискуссию на тему "надо- не надо" - ну нет переменных в системе для Administrative Tools, SendTo, CD Burning, Templates, CommonMusic и т.п. зачем спорить-то?
И действительно, зачем спорить-то?
Code:
Administrative Tools: cd %$PROGRAMS%\Administrative Tools
CD Burning:    cd %$LOCAL_APPDATA%\Microsoft\Windows\Burn\Burn
SendTo:    cd %$APPDATA%\Microsoft\Windows\SendTo
SendTo:    cd %USERPROFILE%\SendTo
Templates:    cd %$APPDATA%\Microsoft\Windows\Templates
CommonMusic:   cd %Public%\Music
Back to top
View user's profile Send private message
ApceH



Joined: 08 Apr 2011
Posts: 316
Location: Димитровград

Post (Separately) Posted: Thu Apr 21, 2011 18:51    Post subject: Reply with quote

Давайте, как и советовал Вахмурка, составим список ключей.
Причем не просто ссылки на ветки реестра, а по-отдельности с кратким пояснением. И в синтаксисе, сразу пригодном для применения с TCShellCD.

Вот из ветки HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders:
Code:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Common Desktop ;общий рабочий стол
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Common Start Menu ;общее меню Пуск
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\CommonVideo ;общее видео
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\CommonPictures ;общие рисунки
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Common Programs ;общие программы
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\CommonMusic ;общая музыка
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Common Startup ;общий автозапуск
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Common Documents ;общие документы


Last edited by ApceH on Thu Apr 21, 2011 18:54; edited 1 time in total
Back to top
View user's profile Send private message
Total7zip



Joined: 27 Nov 2010
Posts: 287

Post (Separately) Posted: Thu Apr 21, 2011 18:52    Post subject: Reply with quote

2Flasher
Quote:
Templates: cd %$APPDATA%\Microsoft\Windows\Templates

на русской XP не работает.
зато работает
Quote:
TCShellCd.exe HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Templates

ради чего и создавалась эта утилита.
_________________
Total7zip - архиваторный+content+lister плагин, 0.8.5.2
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Apr 21, 2011 19:07    Post subject: Reply with quote

Total7zip
Ну в XP много чего нет, например переменной %Public%, это же не значит, что теперь мне эту переменную нет смысла использовать? Wink
Да, системных папок прибавилось, соответственно в XP нет доступа к ряду папок, которые есть в 7. Так что всё логично.
Но у меня всё-таки просьба вернуться к моему первому сообщению, касаемому определённого куста и запуска диалогов по GUID. А эти разговоры про 4 ветки оставим.
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2586
Location: Большая деревня Москва

Post (Separately) Posted: Thu Apr 21, 2011 19:13    Post subject: Reply with quote

Quote:
Вот из ветки HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
Я позволю себе дополнить свое предложение. Давайте выкладывать только те пути из реестра, которым не соответствует ни одна переменная окружения. В списке выше таковых, по-моему, нет. или я ошибаюсь?
Если ключи реестра дублируют переменные окружения, у последних явное преимущество: для их использования не надо скачивать никаких утилит, операционная система сама и есть такая утилита.
Прошу прощения, что своей неконкретностью кого-то обнадежил Wink
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Apr 21, 2011 19:26    Post subject: Reply with quote

Вахмурка wrote:
В списке выше таковых, по-моему, нет. или я ошибаюсь?
%$COMMON_APPDATA%
%$COMMON_DESKTOPDIRECTORY%
%$COMMON_DOCUMENTS%
%$COMMON_PICTURES%
%$COMMON_STARTMENU%
%$COMMON_PROGRAMS%
%$COMMON_STARTUP%
Back to top
View user's profile Send private message
Total7zip



Joined: 27 Nov 2010
Posts: 287

Post (Separately) Posted: Thu Apr 21, 2011 19:30    Post subject: Reply with quote

по-моему вот для этих ключей нет переменных среды
Code:

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Administrative Tools
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\SendTo
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\CD Burning
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Cache
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Cookies
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Favorites
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\History
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Local Settings
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\NetHood
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\PrintHood
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Recent
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Templates
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\CommonMusic
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\CommonVideo
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Common Administrative Tools
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Common Programs
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Common Startup
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Common Favorites
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Common Templates

_________________
Total7zip - архиваторный+content+lister плагин, 0.8.5.2
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2586
Location: Большая деревня Москва

Post (Separately) Posted: Thu Apr 21, 2011 20:40    Post subject: Reply with quote

Да хоть по названию:
Quote:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Common Startup
Quote:
%$COMMON_STARTUP%
Проверьте - разве они ведут не в одно и то место?
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Thu Apr 21, 2011 21:03    Post subject: Reply with quote

Total7zip
А если добавить в утилиту "или"?
Ну, указываем переменную окружения, если она есть - переходим по ее значению и всё, если нет - далее, через какой-нибудь разделитель - ключ реестра, если существует - по его значению и закончили, если нет - опять, через тот же разделитель, умолчание (например, %COMMANDER_DRIVE%\temp - о портабельности, вроде, говорим), если не существует - создать.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group