Сравнение файлов в панелях по именам

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

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

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

Сообщение Flasher »

ingerard
Надо-то зачем? + На вопрос ответ будет?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
ingerard
Сообщения: 128
Зарегистрирован: Вс дек 04, 2016 21:51

Сообщение ingerard »

Если бы было нужно, то зачем ограничивать поведение?
После пару раз использования скрипта, вдруг позже понял что это тоже необходимо. Если вдруг надо быстро выделить один схожий файл под курсором на другой панели, и чтоб лишить себя лишних нажатий для выделения.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

ingerard
Ну, вот и славно. Так что по совпадению относительности? Можно хотя бы один пример такой потребности?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
ingerard
Сообщения: 128
Зарегистрирован: Вс дек 04, 2016 21:51

Сообщение ingerard »

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

Сообщение Flasher »

Это не то же самое. Там речь идёт о восстановлении выделения из буфера. А тут о выделении в обеих панелях. Ладно, внёс правку.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
ingerard
Сообщения: 128
Зарегистрирован: Вс дек 04, 2016 21:51

Сообщение ingerard »

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

Сообщение Flasher »

ingerard
Пож-та. В 7 строке S на T заменил. Для результатов поиска нужно смотреть на получатель, а не источник.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
LonerD
Сообщения: 1174
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

Спустя три года обновил свой вариант на AHK.
Ссылка на полную версию скрипта.
Данная версия скрипта работает только под TC 9.0 и более новыми версиями. Благодаря новым возможностям Тотала удалось значительно сократить и оптимизировать код.

[cut="Скрипт"]

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

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; Total Commander DreamLair                                           ;
; Script: Selection the same name files and/or dirs in the panels     ;
; Скрипт: Виділення в панелях однойменних файлів та/або каталогів     ;
; Скрипт: Выделение в панелях одноимённых файлов и/или каталогов      ;
; Version: 2.0 (2018.09.24)                                           ;
; Required: Total Commander 9.0+                                      ;
; Tested on: Total Commander 9.21a                                    ;
; Author: LonerD DreamLair.net                                        ;
; Made in Donetsk People's Republic                                   ;
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; Parameter:                                                          ;
;    1) Selection mode:                                               ;
;       1 - all (default); 2 - only files; 3 - only dirs              ;
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; Параметр:                                                           ;
;    1) Метод виділення:                                              ;
;       1 - все (за замовч.); 2 - тільки файли; 3 - тільки каталоги   ;
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; Параметр:                                                           ;
;    1) Метод выделения:                                              ;
;       1 - всё (по умолчанию); 2 - только файлы; 3 - только каталоги ;
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;

#NoEnv
#NoTrayIcon
#MaxMem 1024
#SingleInstance force
SetBatchLines, -1

Mode = %1%
if Mode not in 1,2,3
  Mode = 1 ; файли і каталоги

ClipSaved := ClipboardAll
Clipboard := ""

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

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
PathA := StrReplace(PathA, "\*.*", "\")

hw_TCPathB := SendMessageTC(1074, 11-TCPanelA, 0, A)
ControlGetText, PathB,, % "ahk_id " hw_TCPathB
PathB := StrReplace(PathB, "\*.*", "\")

SendMessage, 1075, 524,,, % "ahk_id " hw_TTOTAL_CMD
SendMessage, 1075, 330 . Mode,,, % "ahk_id " hw_TTOTAL_CMD
SelItems := SendMessageTC(1074, 1004+TCPanelA, 0, A)
if ( SelItems = 0 )
  Goto, Exit

SendMessage, 1075, 2017,,, % "ahk_id " hw_TTOTAL_CMD
FilesA := Clipboard
SendMessage, 1075, 2018,,, % "ahk_id " hw_TTOTAL_CMD
FileListA := Clipboard

SendMessage, 1075, 4006,,, % "ahk_id " hw_TTOTAL_CMD
SendMessage, 1075, 524,,, % "ahk_id " hw_TTOTAL_CMD
SendMessage, 1075, 330 . Mode,,, % "ahk_id " hw_TTOTAL_CMD
if ( PathA = PathB )
  Goto, Exit

SelItems := SendMessageTC(1074, 1007-TCPanelA, 0, A)
if ( SelItems = 0 )
  Goto, NoSelection

SendMessage, 1075, 2017,,, % "ahk_id " hw_TTOTAL_CMD
FilesB := Clipboard
SendMessage, 1075, 2018,,, % "ahk_id " hw_TTOTAL_CMD
FileListB := Clipboard

FileListSel := ""
Loop, Parse, FilesA, `n, `r
{
  CurrentFile := A_LoopField
  Loop, Parse, FilesB, `n, `r
  {
    if ( CurrentFile = A_LoopField )
      FileListSel := FileListSel A_LoopField "`r`n"
  }
}

if ( FileListSel = "" )
  Goto, NoSelection

FileListSelA := ""
FileListSelB := ""
FileListSelX := ""

FileListX := FileListB
Gosub, LoopFilelist
FileListSelB := FileListSelX

FileListX := FileListA
Gosub, LoopFilelist
FileListSelA := FileListSelX

StringReplace, FileListSelA, FileListSelA, % PathA, , All
StringReplace, FileListSelB, FileListSelB, % PathB, , All

Clipboard := FileListSelB
SendMessage, 1075, 2033,,, % "ahk_id " hw_TTOTAL_CMD
SendMessage, 1075, 400 . TCPanelA,,, % "ahk_id " hw_TTOTAL_CMD
Clipboard := FileListSelA

SendMessage, 1075, 2033,,, % "ahk_id " hw_TTOTAL_CMD

Exit:
Clipboard := ClipSaved
ClipSaved := ""
FileListA := ""
FileListB := ""
FileforSel := ""
FileListSelA := ""
FileListSelB := ""
FileListSelX := ""

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

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
LoopFilelist:
Loop, Parse, FileListSel, `n, `r
{
  FileforSel := A_LoopField
  FileLen := StrLen(FileforSel)
  if ( FileLen > 0 )
  {
    Loop, Parse, FileListX, `n, `r
    {
      StringLen := StrLen(A_LoopField)
      SlashSymbol := SubStr(A_LoopField, StringLen - FileLen, 1)
      StringRight, CurrentFile, A_LoopField, FileLen
      if (( StringLen - FileLen > 1 ) && ( SlashSymbol = "\" ) && ( CurrentFile = FileforSel ))
        FileListSelX := FileListSelX A_LoopField "`r`n"
    }
  }
}
Return
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
NoSelection:
  SendMessage, 1075, 524,,, % "ahk_id " hw_TTOTAL_CMD
  SendMessage, 1075, 4006,,, % "ahk_id " hw_TTOTAL_CMD
  SendMessage, 1075, 524,,, % "ahk_id " hw_TTOTAL_CMD
  Goto, Exit
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; Total Commander Send Message function            ;
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
SendMessageTC(TCMsg, wParam, lParam, aControl)
{
  SendMessage, % TCMsg, % wParam, % lParam, % aControl, % "ahk_id " hw_TTOTAL_CMD
  return ErrorLevel
}
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
[/cut]

CaptainFlint:
Спрятал длинный код.
Windows 11 | TC DreamLair eternal pre-α
Ответить