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 

Переход в папку следом за текущей в родительском каталоге
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
vik313



Joined: 07 Apr 2019
Posts: 8

Post (Separately) Posted: Sun Apr 07, 2019 13:36    Post subject: Переход в папку следом за текущей в родительском каталоге Reply with quote

Здравствуйте!

Можно ли реализовать переход по папкам при помощи кнопки в Тотал коммандере?

У меня есть папки называются они по-другому. 1,2,3,n
Как находясь в папке 1, нажатием на кнопку перейти в папку ниже уровнем - 2, потом нажатием в папку 3 и так далее??

Название папок разное, файлов разное.

Спасибо!
Back to top
View user's profile Send private message
LonerD



Joined: 04 Jan 2011
Posts: 1168
Location: Донецк

Post (Separately) Posted: Sun Apr 07, 2019 14:15    Post subject: Reply with quote

AutoHotkey cкрипт.
Навигация круговая. Если каталог последний - то происходит переход в первый каталог в той же панели (и в обратную сторону - из первого в последний)

Code:
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; Total Commander DreamLair                        ;
; Script: Go to parallel directory                 ;
; Скрипт: Переход в параллельный каталог           ;
; Script version: 1.0 (2018.09.30)                 ;
; Required: Total Commander 9.0+                   ;
; Script author: LonerD                            ;
; Site: https://dreamlair.net                      ;
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; Parameter:                                       ;
;     1 - backward navigation                      ;
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;

#NoEnv
#NoTrayIcon
#SingleInstance force
SetBatchLines, -1
SendMode Input

If not ( WinExist("ahk_class TTOTAL_CMD") || WinActive("ahk_class TTOTAL_CMD") )
  ExitApp
WinGet, hw_TTOTAL_CMD, ID, A
global hw_TTOTAL_CMD

NavMode = %1%
if ( NavMode != 1 )
  NavMode = 0

DllCall("LockWindowUpdate", "uint", hw_TTOTAL_CMD)

TCPanelA := SendMessageTC(1074, 1000, 0, A)

hw_TCPathA := SendMessageTC(1074, 8+TCPanelA, 0, A)
ControlGetText, PathA,, % "ahk_id " hw_TCPathA

SendMessage, 1075, 2002,,, % "ahk_id " hw_TTOTAL_CMD

TCPanelA := SendMessageTC(1074, 1000, 0, A)
TCItemsA := SendMessageTC(1074, 1002+TCPanelA, 0, A)
TCCaretA := SendMessageTC(1074, 1006+TCPanelA, 0, A)
TCUpDirA := SendMessageTC(1074, 1008+TCPanelA, 0, A)
TCFileA := SendMessageTC(1074, 1010+TCPanelA, 0, A)

if ( TCFileA = 4294967295 )
  TCFileA := TCItemsA

ControlGetText, PathA2,, % "ahk_id " hw_TCPathA
if ( PathA = PathA2 )
  Goto, Exit

if ( NavMode = 1 )
  NextDir := TCCaretA = TCUpDirA ? TCFileA - TCUpDirA - 1 : TCCaretA - TCUpDirA - 1
else
  NextDir := TCFileA - TCCaretA > 1 ? TCCaretA + 1 - TCUpDirA : 0

SendMessage, 1075, 2049, % NextDir,, % "ahk_id " hw_TTOTAL_CMD
SendMessage, 1075, 1001,,, % "ahk_id " hw_TTOTAL_CMD

Exit:
DllCall("LockWindowUpdate", "uint", 0)
ExitApp

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; Total Commander Send Message function            ;
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
SendMessageTC(TCMsg, wParam, lParam, aControl)
{
  SendMessage, % TCMsg, % wParam, % lParam, % aControl, % "ahk_id " hw_TTOTAL_CMD
  return ErrorLevel
}
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;

_________________
Win11 x64 Eng | TC DreamLair eternal pre-α


Last edited by LonerD on Sun Apr 07, 2019 19:40; edited 1 time in total
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sun Apr 07, 2019 14:21    Post subject: Reply with quote

LonerD
Серьёзно? o_0
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
vik313



Joined: 07 Apr 2019
Posts: 8

Post (Separately) Posted: Sun Apr 07, 2019 14:36    Post subject: Reply with quote

Можно по-подробнее как настроить, что бы процесс запустить с кнопки?
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sun Apr 07, 2019 14:57    Post subject: Reply with quote

Любой вариант из первых 1) и 2) вставляете в поле Команда:. В случае вторых дописываете путь к TCFS2 (последняя), размещённой в подкаталоге ТС. Примеры кодов:
Code:
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe
/ef msg($0B,0) tcm(2002) tcm(3303) tcm(2054) tcm(2003) tcm(2918) msg($0B,1) redraw()
wciconex.dll,334
Перейти к предыдущей папке в родительском каталоге
Code:
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe
/ef msg($0B,0) tcm(2002) tcm(3303) tcm(2053) tcm(2003) tcm(2918) msg($0B,1) redraw()
wciconex.dll,333
Перейти к следующей папке в родительском каталоге
Иконки сами подберёте.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
vik313



Joined: 07 Apr 2019
Posts: 8

Post (Separately) Posted: Sun Apr 07, 2019 15:30    Post subject: Reply with quote

Супер! То, что нужно!
Back to top
View user's profile Send private message
Avada



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

Post (Separately) Posted: Sun Apr 07, 2019 17:52    Post subject: Reply with quote

По очевидным причинам тема переносится из "Общих вопросов" в "Автоматизацию".
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Вахмурка



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

Post (Separately) Posted: Sun Apr 07, 2019 19:06    Post subject: Reply with quote

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



Joined: 04 Jan 2011
Posts: 1168
Location: Донецк

Post (Separately) Posted: Sun Apr 07, 2019 19:39    Post subject: Reply with quote

Flasher wrote:
Серьёзно? o_0

У меня круговая навигация предусмотрена Very Happy
(а ещё был скрипт на vbs с использованием TCFS2, датированный маем 2013, но он сейчас у меня не работает на Win10)
_________________
Win11 x64 Eng | TC DreamLair eternal pre-α


Last edited by LonerD on Mon Apr 08, 2019 02:20; edited 1 time in total
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sun Apr 07, 2019 20:18    Post subject: Reply with quote

Вахмурка
Мы это где-то уже обсуждали. И там я объяснял, что — ничего. Должно быть именно текущее поведение, когда ты понимаешь, где конец, а где начало.

LonerD
Аналогично. Я давно пытался себе представить ситуацию, в которой мне понадобился бы реверс, так и не смог (при своей-то фантазии)...
P.S.: Ты когда прекратишь в 100500 раз цитировать свой ник?
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Вахмурка



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

Post (Separately) Posted: Sun Apr 07, 2019 20:24    Post subject: Reply with quote

Flasher wrote:
Должно быть именно текущее поведение, когда ты понимаешь, где конец, а где начало
Правильно. Зачем заставлять машину делать то, что можно сделать самому?
_________________
Сайт 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: Sun Apr 07, 2019 20:28    Post subject: Reply with quote

Вахмурка
Раз правильно, то какие проблемы? Cool
Или ты всплывающих окон захотел? Мне они точно ни к чему.

LonerD wrote:
а ещё был скрипт на vbs с использованием TCFS2
Сейчас можно и без скрипта это проделывать:
Code:
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe /ef msg($0B,0) tcm(2002) tcm(3303)
if(msg(1074,1006+msg(1074,1000))-msg(1074,1008+msg(1074,1000)),tcm(2054),tcm(2023)+send({END})) tcm(2003) tcm(2918) msg($0B,1) redraw()
wciconex.dll,334
Циклический переход к предыдущей папке в родительском каталоге
Code:
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe /ef msg($0B,0) tcm(2002) tcm(3303)
if(msg(1074,1004+msg(1074,1000))==msg(1074,1006+msg(1074,1000))+1-msg(1074,1008+msg(1074,1000)),tcm(2049),tcm(2053)) tcm(2003) tcm(2918) msg($0B,1) redraw()
wciconex.dll,333
Циклический переход к следующей папке в родительском каталоге

_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2563

Post (Separately) Posted: Fri Apr 12, 2019 23:19    Post subject: Reply with quote

Однокнопочный вариант:
Code:
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe /ef "if(pressedShift, varset(4,1), varset(4,0)) if(pressedCtrl, varset(3,1), varset(3,0))
run_item(locktc,1) tcm(2002) tcm(524) tcm(3303) varset(2,msg($432,1004+msg($432,1000))) tcm(524) if(varget(2)>0, varset(1,msg($432,1006+msg($432,1000))-msg($432,1008+msg($432,1000)))+if(varget(4), varset(1,varget(1)-1)+if(varget(1)>=varget(2)||(varget(1)<0&&varget(3)), varset(1,varget(2)-1)), varset(1,varget(1)+1)+if(varget(3), if(varget(1)>=varget(2), varset(1,0)), if(varget(1)>varget(2), varset(1,0), if(varget(1)==varget(2), varset(1,varget(2)-1)))))+msg($433,2049,varget(1))) tcm(2003) run_item(locktc,0) redraw"
WCMICONS.DLL,80
Перейти к следующей или предыдущей (Shift+) папке в родительском каталоге |Ctrl+ разрешает переход от последней к первой и наоборот
Для отслеживания нажатия клавиш Shift и Ctrl кроме утилиты TCFS2 потребуется модуль TCFS2Tools.
Если TCFS2Tools не установлен в TC (или просто нет желания использовать совместно мышь и клавиатуру), то на основе предложенного варианта можно сделать отдельные кнопки (или назначить отдельные клавиши), в которых, для задания направления перехода к следующей/предыдущей папке, pressedShift заменить на 0/1, а для задания запрета/разрешения перехода от последней к первой и наоборот, pressedCtrl заменить на 0/1.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Fri Apr 12, 2019 23:41    Post subject: Reply with quote

Вот это дичьизврат. Shocked
sa wrote:
можно сделать отдельные кнопки (или назначить отдельные клавиши)
Уж лучше взять мои примеры и при желании назначить юзеркомандам по хоткею, чем делать два/четыре о-хо-хо-дубликата с правкой пары цифр.
Я ещё понимаю макрос в ini или скрипт, где нужно пару цифровых параметров прописать, но дублировать...
Интересно, как такое число varget-ов и if-ов на скорости сказывается.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2563

Post (Separately) Posted: Mon Apr 15, 2019 10:12    Post subject: Reply with quote

Если одной кнопки с командой, имеющей кучу модификаторов (Shift, Ctrl, Alt) окажется недостаточно, а создание двух команд-дублей покажется нерациональным, то, разумеется, желающие могут оформить команду в секции [Items] файла TCFS2.ini, например, так:
Code:
NextPrevParentDir = if(1, run_item(locktc,1)+tcm(2002)+tcm(524)+tcm(3303)+varset(2,msg($432,1004+msg($432,1000)))+tcm(524)+ if(varget(2)>0, varset(1,msg($432,1006+msg($432,1000))-msg($432,1008+msg($432,1000)))+if(#1, varset(1,varget(1)-1)+if(varget(1)>=varget(2)||(varget(1)<0&&#2), varset(1,varget(2)-1)), varset(1,varget(1)+1)+if(#2, if(varget(1)>=varget(2), varset(1,0)), if(varget(1)>varget(2), varset(1,0), if(varget(1)==varget(2), varset(1,varget(2)-1)))))+msg($433,2049,varget(1)))+tcm(2003)+run_item(locktc,0)+redraw)
и вызывать её кнопками/клавишами с параметрами вида:
Code:
TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe
/ei "NextPrevParentDir (  pressedAlt ,1  )"
WCMICONS.DLL,80
Перейти к следующей или предыдущей (Alt+) папке в родительском каталоге,|с закольцовыванием
Примеры параметров:
0 , 0 перейти к следующей, без закольцовывания;
1 , 1 перейти к предыдущей, с закольцовыванием;
pressedShift|pressedAlt , pressedCtrl перейти к следующей, а при дополнительном нажатии Shift или Alt - к предыдущей, закольцовывать при дополнительном нажатии Ctrl
и т.п.
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