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 

Вызов диалога переименования для единичного файла

 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Avada



Joined: 01 Aug 2008
Posts: 10252
Location: Россия, Саратов

Post (Separately) Posted: Sun Feb 21, 2010 12:20    Post subject: Вызов диалога переименования для единичного файла Reply with quote

Проблема возникла как логическое продолжение вот этого моего поста. Пусть в неком каталоге есть отображаемый элемент [..] и, среди прочего, единичный файл или подкаталог, который мы хотим переименовать не в панели, как обычно, а в диалоге, в норме предназначенном для пакетного переименования. Именно в нём, а не в вызываемом по F6 общем диалоге переименования/перемещения!
Хотелось бы, имея под курсором объект, подлежащий переименованию, выполнять VBS-скриптом следующую цепочку действий:
• выделение объекта под курсором;
• выделение элемента [..];
• возврат курсора на исходный объект;
• вызов команды cm_RenameOnly для этой пары.
Результатом должно стать открытие диалога пакетного переименования для объекта под курсором.

И если скрипт случайно запущен в корневом каталоге, где не включено отображение [..], можно ли сделать так, чтобы просто сообщалось, что операция здесь неприменима?
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2567

Post (Separately) Posted: Sun Feb 21, 2010 19:29    Post subject: Reply with quote

Вот что получилось на скорую руку:
Code:
'  Description:  Вызов диалога пакетного переименования для файла под курсором
'  Parameters:   %N
'  Requirements: WSH Helper for TC by Volniy
'  Installation: Создайте для скрипта, например, кнопку на панели инструментов TC
'  Autor:        sa
Option Explicit
If WScript.Arguments.Count < 1 Then
  MsgBox "Курсор не должен располагаться на строке ""..""", _
   vbOKOnly + vbCritical,  "Вызов диалога пакетного переименования"
  WScript.Quit
End If
Dim TCS, P_N
Set TCS = CreateObject("TCScript.Helper")
TCS.LockTC True
TCS.SendCommand 524  'cm_ClearAll
P_N = TCS.GetSrcSelectedFiles(True)(0)
If InStrRev(P_N,"\") = Len(P_N) Then
  P_N = Left(P_N,len(P_N)-1)
End If
P_N = Right(P_N,Len(P_N)-InStr(1,P_N,"\"))
If (TCS.INIRead(TCS.MainINI, "Configuration", "ShowParentDirInRoot", 0) = 1) Or _
           Instr(1,P_N,"\") > 0 Then
  TCS.SendKeystroke "{INSERT}{HOME}{INSERT}"
  TCS.SendCommand 2053 'cm_GotoNextSelected
  TCS.SendCommand 1002 'cm_RenameOnly
Else
  MsgBox "Нет "".."" в корневом каталоге диска! Диалог неприменим.", _
   vbOKOnly + vbSystemModal,  "Вызов диалога пакетного переименования"
End If
TCS.LockTC False
Set TCS = Nothing
Wscript.Quit


Last edited by sa on Mon Feb 22, 2010 06:30; edited 1 time in total
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10252
Location: Россия, Саратов

Post (Separately) Posted: Sun Feb 21, 2010 21:53    Post subject: Reply with quote

sa
Спасибо, но скрипт работать пока не хочет. При вызове кнопкой отображается сообщение "Курсор не должен располагаться..." и т.д. Курсор, естественно, там не располагается. Жму OK, ничего не происходит.
Кроме того, ИМХО, основная цепочка действий мне представлялась проще. Привожу просто в столбик:
cm_ClearAll
{INSERT}
{HOME}
{INSERT}
cm_GotoNextSelected
cm_RenameOnly
Или я что-то недопонял? И зачем cm_RereadSource? И как выясняется, что в корне нет [..]?
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2567

Post (Separately) Posted: Sun Feb 21, 2010 21:58    Post subject: Reply with quote

Avada
В качестве параметра %N точно указан?
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10252
Location: Россия, Саратов

Post (Separately) Posted: Sun Feb 21, 2010 22:25    Post subject: Reply with quote

sa
Разумеется, забыл. Wink
После добавления параметра при запуске имеем следующее:
Code:
---------------------------
Сервер сценариев Windows
---------------------------
Сценарий:   C:\Totalcmd\Utils\Scripts\SingleRenamer.vbs
Строка:   13
Символ:   1
Ошибка:   Не удается найти указанный файл.

Код:   80070002
Источник:    (null)

---------------------------
ОК   
---------------------------

На кнопке путь запуска пустой.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2567

Post (Separately) Posted: Sun Feb 21, 2010 22:37    Post subject: Reply with quote

Avada
Скорее всего не установлен "Requirements: WSH Helper for TC by Volniy"
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10252
Location: Россия, Саратов

Post (Separately) Posted: Sun Feb 21, 2010 23:20    Post subject: Reply with quote

sa
Да нет, он установлен, но регистрация каким-то образом совсем недавно слетела, там все скрипты перестали работать. Восстановил.
Что ж, смотрим. В подкаталоге, где есть [..] (в том числе и в корневом), если опция включена, скрипт работает, спасибо. (Теперь я понял, зачем нужно перечитывание панели.)
А вот ситуация, когда у нас корень, но [..] в нём нет, обрабатывается не вполне корректно. Имеем предупреждение, что [..] нет в корневом каталоге. Хорошо, правильно. Что я должен ожидать, нажимая OK? Возврата в корень к исходному состоянию. Вместо этого я постоянно оказываюсь в виртуальной папке Корзина! Хорошо бы это как-то поправить.
И второй нюансик. Если в вызванном диалоге переименования я нажму OK, всё нормально. При нажатии же кнопки Отмена, диалог закрывается, но фильтрация по выделению автоматически не снимается. Можно с этим что-то сделать?
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2567

Post (Separately) Posted: Mon Feb 22, 2010 00:10    Post subject: Reply with quote

Avada wrote:
Вместо этого я постоянно оказываюсь в виртуальной папке Корзина!
У меня работает нормально. Комбинация клавиш Ctrl+R случайно не переназначена? Что происходит, если строку
Code:
TCS.SendKeystroke "^R"     'cm_RereadSource
закомментировать?
Avada wrote:
фильтрация по выделению автоматически не снимается. Можно с этим что-то сделать?
В данном варианте скрипта нет.
Возможно удастся обойти эту ситуацию в варианте с cm_GotoNextSelected. Но это уже завтра...
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10252
Location: Россия, Саратов

Post (Separately) Posted: Mon Feb 22, 2010 00:31    Post subject: Reply with quote

sa
Если закомментировать или вообще убрать, перехода в Корзину нет. Ctrl+R не переназначено. Но комбинация для перехода в Корзину у меня Ctrl+Shift+R. Похоже, в этом-то и причина. Пока поменял в скрипте на F2, которая у меня тоже в натуральном виде. Работает.
А что можно сделать с Ctrl+R? И зачем вообще нужна клавиша при наличии команды обновления как таковой?
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2567

Post (Separately) Posted: Mon Feb 22, 2010 00:54    Post subject: Reply with quote

Переделал скрипт с использованием команды cm_GotoNextSelected. Скорректировал определение корневого диска без "..".
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10252
Location: Россия, Саратов

Post (Separately) Posted: Mon Feb 22, 2010 10:32    Post subject: Reply with quote

sa
Отлично. Единственная оставшаяся просьба: можно ли сделать предупреждающий диалог при вызове скрипта в корне без [..] по образу и подобию диалога, отображаемого при курсоре на [..]? То есть с таким же значком, расположенным не в заголовке?
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2567

Post (Separately) Posted: Mon Feb 22, 2010 10:46    Post subject: Reply with quote

Avada wrote:
можно ли сделать предупреждающий диалог
Для этого достаточно поменять в последнем MsgBox vbSystemModal на vbCritical.
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10252
Location: Россия, Саратов

Post (Separately) Posted: Mon Feb 22, 2010 10:59    Post subject: Reply with quote

sa
Сделал. Что ж, спасибо за оперативность и качество работы!
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
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
Page 1 of 1

 
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